一、互联网项目架构目标

1.互联网项目的特点

  • 用户多
  • 流量大,并发高
  • 海量数据
  • 易受攻击
  • 功能繁琐
  • 变更快

2.互联网项目架构的目标

(1)高性能
        提供快速的访问体验。衡量网站的性能指标: 
  • 响应时间:指执行一个请求开始到最后收到响应数据所花费的总时间
  • 并发数:指系统同时(同一时刻)能处理的请求数量
  •         并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接,每秒钟服务器连接的总TCP数量
  •         请求数:也称为QPS(Query Per Second) 指每秒请求(查询)数
  •         并发用户数:单位时间内有多少用户
  • 【tips】请求和TCP连接的区别:
  •         请求:比如打开百度,都会有页面请求、静态资源请求等等请求。
  •         TCP连接:一个TCP连接可以发送多个请求。
  • 吞吐量:指单位时间内系统能处理的请求数量
  •         QPS:Query Per Second 每秒请求数
  •         TPS:Transactions Per Second 每秒事务数。 
  •         【tips】一个事务是指一个客户端向服务器发送请求然后服务器做出响应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。 一个页面的一次访问,只会形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,就会有多个QPS,因此QPS >= 并发连接数 >= TPS
(2)高可用
        网站服务一直可以正常访问。
(3)可伸缩
        通过硬件增加/减少,提高/降低处理能力。
(4)高可扩展
        系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块。
(5)安全性
        提供网站安全访问和数据加密,安全存储等策略。
(6)敏捷性
        随需应变,快速响应。

二、集群和分布式

1.集群

        很多“人”一起干一样的事。同一个业务模块,部署在多台服务器上。
        

2.分布式

        很多“人”一起干不一样的事。这些不一样的事,合起来是一件大事。一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上。
        

三、分布式架构演进

        

1.单体架构

        
        当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
(1)优点
  • 比较简单,开发部署都很方便。
(2)缺点
  • 项目启动慢
  • 项目可靠性差,若D出问题,会影响其余三个模块
  • 可伸缩性差
  • 扩展性和可维护性差
  • 性能低

2.垂直架构

        
        垂直架构是将单体架构中的多个模块拆分为多个独立(互不相干)的项目,形成多个独立的单体架构。即将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
(1)优点
  • 解决了单体架构的部分问题
(2)缺点
  • 重复功能太多

3.分布式架构

        
        分布式架构就是在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务,供其他模块消费,来实现服务的共享和复用。此时,用于提高业务复用及整合的分布式服务框架(RPC,Remote Procedure Call远程过程调用)是关键,如Http REST风格等。
(1)优点
  • 解决了重复功能太多的问题。
(2)缺点
  • 服务提供者一旦发生变动,所有消费者都需要跟着变动

4.SOA架构

        
        SOA架构(面向服务的架构)是一个模型组件,将应用程序的不同功能单元(服务)进行拆分,并通过这些服务之间定义的接口和契约联系起来。解决了服务提供者变动引起消费者变动的问题。
【tips】ESB(企业服务总线):相当于一个服务中介,主要提供服务之间的交互。功能包括负载均衡、流量控制、加密处理、服务监控、监控告急、异常处理等。

5.微服务架构

        
        微服务架构是基于SOA架构,强调将业务进行彻底的组件化和服务化,将原有的单个业务系统拆分成多个可独立开发、设计、运行的小应用,这些小应用之间通过服务完成交互和集成。
(1)特点
  • 微服务之间采用RESTful等轻量协议传输
  • 将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务
  • 简化部署:把服务拆分成独立的单个微服务,方便自动化部署、测试、运维。
(2)缺点
  • 微服务过多,服务治理成本高,不利于系统维护
  • 分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大