互联网应用的特点及其架构演变
一、传统项目和互联网项目的区别
传统项目:
OA、HR、CRM等系统 目标人群:企业员工
特点:项目使用人数较少、并发量相对较少、用户忍耐力较高
互联网项目:
淘宝、天猫、京东 目标人群:互联网
特点:使用人数躲,访问量大,更注重用户体验:美观、功能、速度、稳定性
对于互联网项目而言,后端工程师可以干预到的,速度与稳定性
速度:打开一个新的页面,一瞬间的事情,页面间跳转没有延迟
稳定性:网站全年99.9%都可正常访问,不会出现问题
二、大型互联网项目架构目标:
互联网项目的特点:
-
用户多
-
流量大、并发高
-
海量数据
-
易受攻击
-
功能繁琐
-
变化快
衡量网站的性能指标
- 响应时间:执行一个请求从开始时间到最后收到响应数据所花费的总体时间
-
并发数:系统同时能处理的请求数量
- 并发链接数:指客户端向服务器发起请求,并简历TCP链接,每秒服务器链接的总TCP数量
- 请求数:QPS(Query Per Second)指每秒多少请求
- 并发用户数:单位 时间内有多少用户
-
吞吐量:指单位时间内系统能处理的请求数量
- QPS:Query Per Second指每秒多少请求
- TPS:Transaction Per Second 每秒事务数
- 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此赖计算使用的时间和完成的事务个数。
互联网项目的架构目标
- 高性能:提供快速的访问体验
- 高可用:网站服务一直可以正常访问
- 可伸缩:通过硬件增减,可以提高、降低处理能力(大促扩容)
- 高可扩展:系统间耦合低,方便的通过新增、移除方式,增加、减少新的功能模块
- 安全性:提供网站安全访问和数据加密,安全存储策略
- 敏捷性:随需应变,快速响应
集群和分布式
集群:
- 通俗描述:很多机器,干一样的事情
- 专业描述:一个业务模块,部署在多态服务器上
分布式:
-
通俗描述:很多机器,每台集群干不一样的事情,合起来就是一件复杂的大事(专业的干专业事,因为每件事性能要求不同)
-
专业描述:一个大的业务系统,拆分为小的业务板块,分别部署在不同机器上
集群架构下的项目满足以下特点:
-
高性能:集群可扩展,性能不够可以加机器,性能得以保证
-
高可用:只要有一台机器没挂,服务就可以提供
集群分布式架构可以很好的满足互联网系统的架构目标
-
高性能:集群可扩展,性能不够可以加机器,性能得以保证
-
高可用:只要有一台机器没挂,服务就可以提供
-
可伸缩:根据不同服务的性能要求,对不同的服务集群进行动态扩缩容
-
高可扩展:需要新增或减少某些服务时,增减响应服务的集群即可
架构演进
单体架构
所有的服务部署在一台服务器上
- 优点:简单开发部署方便,小型项目首选
- 缺点:
- 代码量大,项目启动慢
- 可靠性差
- 可伸缩性差
- 扩展性和可维护性差
- 性能低
垂直架构
垂直架构是将单体架构中的多个模块拆分为多个独立的项目,形成多个独立的单体架构
单体架构存在的问题:
- 项目启动慢
- 可靠性差
- 可伸缩性差
- 扩展性和可维护性差
- 性能低
垂直架构存在的问题:
- 重复功能太多
分布式架构
分布式架构是指在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务,提供给其他消费者以实现服务的共享与重用。
- RPC:Remote Procedure Call 远程过程调用。
垂直架构存在的问题:
- 重复功能太多
分布式架构存在的问题:
- 服务提供方一旦发生变更,所有的笑给方都需要变更
SOA架构
SOA:(Service-OrientedArchitecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务质检定义好的接口和契约联系起来
ESB:(Enterparise Service Bus)企业服务总线,服务中介。主要提供了一个服务与服务之间的交互。ESB包含的功能如:负载均很,流量控制,加密处理,服务的监控,异常处理,监控告急等等
分布式架构存在的问题:
- 服务提供方一旦发生变更,所有的笑给方都需要变更
微服务架构
- 微服务架构是SOA上做的升华,微服务架构强调的是一个重点“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分成为多个可以独立开发、设计、运行的小应用、这些小应用之间通过各种服务完成交互和集成
- 微服务架构=80%的SOA服务架构思想+100%的组件化架构思想+80%的领域建模思想
特点:
- 服务实现组件化:开发者可以自由的选择开发技术,各团队之间不需要相同
- 服务之间交互一般使用REST API
- 去中心化:每个微服务有自己的私有数据库去持久化业务数据
- 自动化部署:把应用拆分为一个一个独立的单个服务,方便自动化的部署、测试、运维