您的位置:首页 > 运维架构 > 网站架构

大型网站技术架构 读书笔记1 大型网站架构模式

2016-05-11 09:02 519 查看
架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

关于什么是模式,这个来自建筑学的词汇是这样定义的:“每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作”。模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。

针对现在的高并发访问,海量数据处理,高可靠运行等一系列问题,众多大型互联网公司提出了各种系统解决方案。这些优秀可靠的方案又被别的网站重复使用,从而形成了模式。

1 分层

分层,这个很好理解。J2EE里经常使用的表现层,应用层,持久层。就是这个逻辑。当然,更细的,我们可以把表现层再细分为视图层与业务逻辑层,前者由美工负责,后者由工程师负责。而应用层,我也能再细分为数据接口层与逻辑处理层,前者做数据的转换,后者是真正的逻辑处理与运算。

2 分割

分割与分层刚好垂直。例如在系统里,把退款和购物这个两个功能分割开来,包装成高内聚低耦合的模块单元。

分层是横向划分,分割是纵向划分。

3 分布式

这个略麻烦。

把经过分层和分割的不同模块部署在不同的服务器上,通过远程调用来协同工作就是分布式。

分布式的优势在于:整个系统可以有更多的硬件/软件资源来对外提供服务,能够应对的并发量也会增大。

劣势在于:1 模块间的调用得通过网络,这样性能会降低一些。
2 因为整个系统被拆分到了多个服务器上,因而系统内部出现宕机的可能性就会增大,一旦有宕机情况发生,就会影响应用。
3 数据一致性不好把握
4 维护比较麻烦

总而言之,得看具体情况,不能为了分布式而分布式。

分布式的具体策略有下面几种:
1 分布式应用和服务
 这个请参考 我对Java分布式系统的一点认识
 文章写的不错
 就看图1 ,就是各个应用之间的互相调用。



 对于分布式系统中的某个应用来说,它的入口往往有三个:
 远程过程调用(其他应用来调用我的服务)、
 消息中间件(我订阅了其他系统的消息,其他系统会给我发消息)、
 web访问(主要访问页面)。
 它的出口则有很多:远程过程调用(调用其他应用的服务)、消息中间件(我向消息服务器发消息,供其他应用消费)、访问分布式缓存、访问分布式日志、访问数据库,执行调度任务。有了入口和出口,剩下的就是应用的核心部分,包括核心逻辑代码和辅助框架。对于分布式系统来说,有个东西必不可少,那就是配置中心。无论是远程过程调用、消息中间件还是分布式缓存,它们都需要从配置中心获取地址列表。
 请问:远程过程调用,消息中间件有什么区别
 远程调用是指另外的模块直接调用本应用中的一个方法。(请参考Dubbo框架)
 消息中间件这块,就是说我收到了来自其他应用的消息,我根据消息来做某些事。(请参考ActivityMQ或RocketMQ)
2 分布式静态资源
 说白了就是把js,css,图片等静态的资源独立部署,并采取独立的域名。
 这样一来可以降低应用服务器的压力,二来还可以因为独立域名而加快浏览器并发下载的速度。
 关于浏览器并发下载资源的问题,请参考
  不同浏览器对于同一域名的并发获取(加载)资源数是有限的
3 分布式数据和存储
 这个我没看懂,后面再说。
4 分布式计算
 应该就是把一个复杂的运算过程,拆解成n个小的过程,然后用n台服务器处理,最后再把结构汇总。

4 集群

集群就是有多个组件来干同一件事情。

最简单的,一个tomcat不行,我就来十个。当然对外,我们得提供一个负载均衡设备,对外部来说,就只有一个应用系统。

5缓存
1 cdn
CDN的全称是Content Delivery Network,即内容分发网络。说白了就是把静态资源(或者是较少变化的资源)放在里用户物理距离更近的网络服务商的服务器上,如果这里有数据,就不用往后走了。
2 反向代理
这里也是缓存的数据,不过它与cdn不同在于,cdn在网络服务商的机房,而反向代理属于网站前端架构的一部分,如果这里有数据,就不用访问应用服务器了。
3 本地缓存
本地缓存主要保存在内存中,如果这里有数据,就不用访问数据库了。
4 分布式缓存
如果本地缓存(也就是内存)不够用了,就采用分布式缓存。
使用缓存有两个前提
1 某些数据要经常被访问
2 数据在一定时间内是有效的,不会马上过期。

6 异步
在前面的说的分层,分隔,分布,多个模块间的相互调用并不是直接调用。而是异步的。也就是说,之前,a调用b,只有等b执行完毕之后,a才会去做其他事。而异步的情况是,a调用b,准确的说是,a发布一个消息,b看到了就去执行,在b执行的过程中,a已经去干别的事情了。
在单机环境下,多个模块间的调用"消息"保存在内存的消息队列中。
在分布式情况下,多个模块就通过分布式消息队列来实现异步。
异步架构就是典型的生产者消费者模式。
异步有这样几个好处
1 调用者与被调用者解耦,只要数据结构布局,两个模块内部可以随意变化,而不用担心影响对方。
2 提高系统的可用性。如果消费者宕掉了,生产者会继续发布消息,对外来说,系统仍是可用的。等消费者恢复了,再继续去处理消息即可。
3 加快网站响应速度。
4 消除并发高峰。

7 冗余
多台应用服务器,一个宕掉,另一个还能用
多台数据库服务器(或者说就是数据库),一个断电,地震,海啸了还有别的可以用。

8 自动化
发布过程自动化:自动化代码管理 、自动化测试、自动化安全检测、自动化部署
网站在运行过程中可能会遇到各种问题:服务器宕机、程序Bug、存储空间不足、突然爆发的访问高峰。
自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源
完全看不懂。或者说看懂了,不知道怎么实现自动化

9 安全
通过密码和手机校验码进行身份认证
网络通信加密(登录、交易等)
存储敏感数据加密处理
网站验证码
常见攻击处理:XSS攻击、SQL注入
垃圾信息、敏感信息过滤
风险控制(对交易转账等重要操作)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息