模式:不断重复发生的问题以及解决问题的核心办法,特征是可重复性。
网站架构模式:
- 一、分层
分层是从纵向层面来说的,也可以说是从技术层面来看的,主要分为应用层,服务层,数据层、
应用层:与用户实现交互,MVC是当今最流行的模式、
服务层:为应用层提供各种服务支撑接口,例如登陆验证服务,购物车服务,用户管理服务等、
数据层:提供底层数据支撑,例如数据库,文件系统,搜索,缓存、
分层的好处在于各层之间低耦合,高内聚、
各层之间独立开发,通过服务接口建立联系,实现通讯,这是分布式部署的前提,为网站的后续升级扩大奠定基础、
- 二、分割
分割是从横向层面而言的,是从业务层面来看的、分割的目的在把一个庞大的软件系统尽可能的切割成若干个功能模块,化大为小,化繁为简、
分割同时也带来了运维的便利,可以方便问题的跟踪定位、
- 三、分布式
分层和分割的目的是为了分布式部署,即将不同的服务部署在不同的机器上面,彼此之间通过远程调用协同工作、
分布式部署可以使软件使用更多的CPU,内存和存储资源,能够处理更大的并发量,为更多的用户提供服务、
问题:
1、服务调用必须通过网络,网络传输对性能影响较大、
2、服务器越多,宕机的可能性就越大,若在一个机器中部署多个服务,会降低网站的可用性、
3、数据一致性、分布式事务、会话保持,如何在分布式环境中解决
4、分布式网站导致错误错综复杂,开发管理维护变得困难、
建议:量力而行,按需配置、
方案:
1、分布式应用和服务
将分层和分割后的应用与服务分布式部署,可以改善系统并发性能和发布速度,减少数据库连接资源消耗,可以使不同应用复用数据库链接、
2、分布式静态资源
动静分离:把网站涉及的JS,CSS,HTML等静态资源与应用服务器分离,独立分布式部署,既提高了网站的响应速度,又降低了应用服务器的负担、
3、分布式数据与存储
大型网站涉及海量数据的处理,海量数据的存储是一个基础性问题,原有的集中式采用磁阵列的方式,对于IO,带宽,容量都带来了极大的挑战、分布式
存储是解决这种问题的唯一途径,分布式存储是分布式计算的前提、
4、分布式计算
海量数据的处理不是一台性能很强的机器能够完成的,必须依靠集体的力量,大家同时工作,才能实现数据的快速处理,给予用户及时响应、
分布式存储是基础,分布式计算是目的、
5、分布式锁
对于同一个资源的并发操作就涉及到分布式锁,例如储户银行借记卡余额,需要对其扣钱和转账操作,如果没有锁就可能出现问题、关系型数据库操作普遍使用锁,
例如update,在此过程中记录是被加锁的、
6、分布式配置
同一个应用在多个节点部署,有时需要在修改配置文件,如何实现一处更改,全部节点即时生效,这就是分布式配置要解决的问题、
目前国内有百度的disconf(推荐使用)和淘宝的diamond(活跃度不够)、
- 四、集群
分布式解决了单兵作战的弱点,而集群是解决如何构建一个更加强大的作战集体、在分布式基础上,集群可以做到负载均衡,自动失效转移(Failover)等等、
- 五、缓存
缓存是改善软件性能的第一手段、缓存适用于频繁读取,较少更新,且长期有效的数据,例如软件系统启动时的配置文件,首页,字典数据等等、
方案:
1、CDN(内容分发网络)
部署在距离用户最近的网络服务运营商,用户的网络请求最新到达网络服务商,在网络服务商机房中缓存网站的一些静态资源,例如首页,可以做到以最快的速度给予用户
响应、
2、反向代理
反响代理属于网站前端架构的一部分,部署在网站的前端,在数据中心,当用户请求到达数据中心时,最新访问到反向代理,在这里缓存网站的静态资源,无需通过应用服务器给予
响应、
3、本地缓存
在应用服务器内部缓存热点数据,无需查询服务器获取、
4、分布式缓存
大型网站需要缓存很多数据,单个应用服务器无法满足,同时单个缓存服务器会有宕机的问题、分布式缓存可以横向扩充,同时也避免的单点故障、
- 六、异步
系统解耦的手段除了分层、分割、分布式,异步也是一个重要的手段,系统之间的消息传递不再是同步调用,而是将一个业务操作分成多个阶段,每个阶段通过共享数据的方式进行协作、
举例:
用户注册:用户填写注册信息,点击提交,系统返回注册成功与否的信息,并发送邮件和短信通知、
动作:保存注册信息,发送邮件,发送短信
同步调用:先保存注册信息,接着发送邮件,再发送短信、
异步调用:保存注册消息,发送消息通知(邮件消息,短信消息),再由邮件消费者和短信消费者分别读取消息后,各自发送短信和邮件、
在同步调用中如果邮件服务器有问题,那么用户就会在线等待很长时间,同理短信也是如此、
而异步则避免了上述问题、
优点:
- 提高系统可用性
- 加快网站响应速度
- 消除并发访问高峰
注意:
在使用异步时,会对用户体验产生影响,必须事先设计好业务流程、
- 七、冗余
节点冗余;数据备份冗余;灾备数据中心
- 八、自动化
1、运维自动化(监控与告警)
2、自动化代码
3、自动化打包
4、自动化部署
5、自动化测试(功能和安全)
6、自动化失效转移与恢复
7、自动化降级
8、自动化资源分配
- 九、安全
互联网的开放性使其从诞生开始就面临这巨大的挑战、网站在安全架构方面也积累了诸多模式:
1、通过密码和手机验证码进行身份认证
2、登陆、交易等操作需要网络通信进行加密
3、网站服务器上存储的敏感数据如用户信息等也进行加密处理
4、防止机器人程序滥用网络程序攻击网站
5、网站使用验证码进行识别
6、对于常见的Web攻击:XSS,SQL,CSRF等进行编码转换处理
7、对于垃圾信息,敏感信息进行过滤
8、对于交易转账等重要操作根据交易模式和交易信息进行风险