2.1网站架构模式
a.分层
1.分层是企业应用系统中最常见的一种架构模式,<br>将系统在横向维度上切分成几个部分,<br>每个部分负责一部分相对比较单一的职责,<br>然后通过上层对下层的依赖和调用组成 一个完整的系统<br>
2.在大型网站架构中也采用分层 结构,<br>将网站软件系统分为应用层、服务层、数据层
3.通过分层,可以更好地将一个庞大的软件系统切分成不同的部分,<br>便于分工合作开发和维护;各层之间具有一定的独立性,只要维持调用接口不变,<br>各层可以根据具体问题独立演化发展而不需要其他层必须做出相应调整<br>
4.但是分层架构也有一些挑战,就是必须合理规划层次边界和接口,<br>在开发过程中, 严格遵循分层架构的约束,<br>禁止跨层次的调用(应用层直接调用数据层)<br>及逆向调用(数据层调用服务层,或者服务层调用应用层)<br>
5.在实践中,大的分层结构内部还可以继续分层,<br>如应用层可以再细分为视图层(美工负责)和业务逻辑层(工程师负责);<br>服务层也可以细分为数据接口层(适配各种输入和输出的数据格式)和逻辑处理层<br>
6.分层架构是逻辑上的,在物理部署上,三层结构可以部署在同一个物理机器上,<br>但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,<br>使网站拥有更多的计算资源以应对越来越多的用户访问<br>
7.所以虽然分层架构模式最初的目的是规划软件清晰的逻辑结构便于开发维护,<br>但在网站的发展过程中,分层结构对网站支持高并发向分布式方向发展至关重要。<br>因此在网站规模还很小的时候就应该采用分层的架构,这样将来网站做大时才能有更好地应对。<br>
b.分割
1.网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,<br>包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;<br>另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力<br>
2.大型网站分割的粒度可能会很小。比如在应用层,将不同业务进行分割,<br>例如将购物、论坛、搜索、广告分割成不同的应用,由独立的团队负责,部署在不同的服务器上<br>
c.分布式
1.分布式应用和服务:将分层和分割后的应用和服务模块分布式部署,<br>除了可以改善网站性能和并发性、加快开发和发布速度、<br>减少数据库连接资源消耗外;还可以使不同应用复用共同的服务,便于业务功能扩展。<br>
2.分布式静态资源:网站的静态资源如JS, CSS, Logo图片等资源独立分布式部署, <br>并釆用独立的域名,即人们常说的动静分离<br>
3.分布式数据和存储:大型网站需要处理以P为单位的海量数据,<br>单台计算机无法提供如此大的存储空间,这些数据需要分布式存储<br>
4.分布式计算<br>支持网站线上服务器配置实时更新的分布式配置<br>分布式环境下实 现并发和协同的分布式锁;<br>支持云存储的分布式文件系统等<br>
5.一个业务拆分为多个子业务,部署在多个服务器上
d.集群
1.同一个业务,部署在多个服务器上
2.即多台服务器部署相同应用构成一个集群,<br>通过负载均衡设备共同对外提供服务<br>
e.缓存
1.缓存就是将数据存放在距离计算最近的位置以加快处理速度。<br>缓存是改善软件性能的第一手段,<br>现代CPU越来越快的一个重要因素就是使用了更多的缓存,<br>在复杂的软件 设计中,缓存几乎无处不在<br>
2.CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,<br>用户的网络请求总是先到达他的网络服务商那里,在这里缓存网站的一些静态资源(较少变化的数据), <br>可以就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在CDN<br>
3.反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,<br>最先访问到的就是反向代理服务器,这里缓存网站的静态资源, 无需将请求继续转发给应用服务器就能返回给用户<br>
4.本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库
5.分布式缓存:大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能承受的,<br>所以除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据<br>
6.使用缓存有两个前提条件,一是数据访问热点不均衡,某些数据会被更频繁的访问, 这些数据应该放在缓存中;二是数据在某个时间段内有效,不会很快过期,否则缓存的 数据就会因已经失效而产生脏读,影响结果的正确性。网站应用中,缓存除了可以加快 数据访问速度,还可以减轻后端应用和数据存储的负载压力,这一点对网站数据库架构 至关重要,网站数据库几乎都是按照有缓存的前提进行负载能力设计的
f.异步
提高系统可用性
加快网站响应速度
消除并发访问高峰
但需要注意的是,使用异步方式处理业务可能会对用户体验、<br>业务流程造成影响, 需要网站产品设计方面的支持<br>
g.冗余
网站需要7x24小时连续运行,但是服务器随时可能出现故障,<br>特别是服务器规模比 较大时,岀现某台服务器宕机是必然事件<br>
需要一定程度的服务器冗余运行,数据冗余备份,<br>这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上<br>
访问和负载很小的服务也必须部署至少两台服务器构成一个集群
数据库除了定期备份,存档保存,实现冷备份外,<br>为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现热备份<br>
h.自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。<br>目前大型网站的自动化架构设计主要集中在发布运维方面<br>
网站需要对线上生产环境进行自动化监控,对服务器进行心跳检测,并监控其各项性能指标和应用程序的关键数据指标
i.安全
通过密码和手机校验码进行身份认证
登录、交易等操作需要对网络通信进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理
为了防止机器人程序滥用网络资源攻击网站,网站使用验证码进行识别;对于常见的用于攻击网站的XSS攻击、SQL注入、进行编码转换等相应处理
对于垃圾信息、敏感信息进行过滤;对交易转账等重要操作根据交易模式和交易信息进行风险控制
2.2架构模式在新浪微博的应用
新浪微博
1.系统分为三个层次,最下层是基础服务层,提供数据库、缓存、存储、搜索等数据服务,<br>以及其他一些基础技术服务,这些服务支撑了新浪微博的海量数据和高并发访问, <br>是整个系统的技术基础<br>
2.中间层是平台服务和应用服务层,新浪微博的核心服务是微博、关系和用户,<br>它们是新浪微博业务大厦的支柱。这些服务被分割为独立的服务模块,<br>通过依赖调用和共享 基础数据构成新浪微博的业务基础<br>
3.最上层是API和新浪微博的业务层,各种客户端(包括Web网站)和第三方应用, <br>通过调用API集成到新浪微博的系统中,共同组成一个生态系统<br>