本文已参与「新人创作礼」活动,一起开启掘金创作之路。
互联网项目架构
1、特点
- 用户多
- 流量大、并发高
- 数据海量
- 易受攻击
- 功能繁琐
- 变更快
2、目标
-
衡量网站的性能指标:
-
响应时间: 指执行一个请求从开始到最后收到响应数据所花费的总体时间
-
并发数: 指系统同时能处理的请求数量
- 并发连接数: 指的是客户端向服务器发起请求,并建立了TCP连接,每秒钟服务器连接的总TCP数量
- 请求数: 也称为QPS(Query Per Second)指每秒多少请求
- 并发用户数: 单位时间内有多少用户
-
吞吐量: 指单位时间内系统能处理的请求数量
- QPS: Query Per Second每秒查询数。
- TPS: Transactions Per Second每秒事务数。
- 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
- 一个页面的一次访问,只会形成一 个TPS; 但-次页面请求,可能产生多次对服务器的请求,就会有多个QPS
QPS>=并发连接数>= TPS
-
-
大型互联网项目架构目标:
- 高性能: 提供快速的访问体验
- 高可用: 网站服务一直可以正常访问(集群)
- 可伸缩: 通过硬件增加/减少,提高/降低处理能力
- 高可扩展: 系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块
- 安全性: 提供网站安全访问和数据加密,安全储存策略
- 敏捷性: 随需应变,快速响应
3、集群和分布式
集群: 一组计算机作为一个整体实现同一业务模块,这些单个的计算机系统就是集群的节点(node)。
分布式: 将不同的业务模块分布在不同的机器上。
分布式的每一个节点,都可以做集群,而集群并不一定就是分布式的。而分布式,从狭义上理解,也与集群差不多,但是它的组织比较松散,不像集群,有一定组织性,一台服务器宕了,其他的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,一个节点宕了,这个业务就不可访问了。
4、架构演进
-
单体架构
- 优点:简单,开发和部署很方便,小型项目首选
- 缺点:启动慢,可靠性差、可伸缩性差、扩展性和可维护性差、性能低
-
垂直架构
将单体架构中多个模块拆分为多个独立的项目,形成多个独立的单独架构
垂直架构存在的问题: 重复功能太多
-
分布式架构
在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务供其他调用者消费,以实现服务得共享和重用,底层通过RPC(远程过程调用)实现
RPC(Remote Procedure Call):
远程过程调用。有非常多的协议和技术来都实现了RPC的过程。比如: HTTP REST风格,Java RMI规范、WebService SOAP协议Hession等等。
分布式架构存在的问题: 服务提供方一旦产生变更,所有消费方都需要变更
-
SOA架构
- SOA(Service- Oriented Architecture),面向服务的架构,一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。
- ESB: (Enterparise Servce Bus),企业服务总线/服务中介。主要是提供了一一个服务于服务之间的交互。ESB包含的功能如:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等。
Dubbo是SOA时代的产物
-
微服务架构
微服务架构是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用,这些小应用之间通过服务完成交互和集成。
微服务架构= 80%的SOA服务架构思想+ 100%的组件化架构思想+ 80%的领域建模思想
特点:
- 服务实现组件化:开发者可以自由选择开发技术,不需要协调其他团队
- 服务之间交互一般使用REST API
- 去中心化:每个微服务有自己私有的数据库持久化业务数据
- 自动化部署:把应用拆分成为独立的单个服务,方便自动化部署、测试、运维