01-Web技术架构演变

1. Web1.0阶段

单宽不足,项目内容少,用户量少。

单体架构
1585843668063

2. Web2.0阶段

带宽提速,用户量增加,门户网站活跃,项目考虑安全性和稳定性。

单体架构搭建集群
1585843906858

3. 搭建集群后的问题

  • Nginx - 解决用户请求平均分发(并发问题)

  • Redis - 解决数据共享并实现缓存功能(数据共享问题)

  • ElasticSearch - 解决搜索数据的功能(搜索问题)

插入中间件
1585844482529

4. 垂直架构

项目包含用户模块,商品模块,订单模块… 模块 + 集群。

垂直架构图
1585847030433

5. 分布式架构

垂直架构 –> 分布式架构。

分布式架构常用方式:

  • Dubbo - RPC(通讯方式)

  • SpringCloud - HTTP(通讯方式)

分布式架构图
1585848961779

6. 服务之间异步通讯

为了实现分布式架构中服务之间的异步通讯,需要使用 RabbitMQ 等消息队列中间件。

分布式架构下,实现异步通讯
1585849391375

7. 服务之间地址维护

由于服务越来越多,每个服务的访问地址都是一样的:协议://地址:端口号/路径

需要使用以下技术:

  • Eureka - 注册中心帮助管理服务信息

  • Robbin - 可以帮实现服务之间的负载均衡

Eureka 实现通讯地址维护,Robbin 实现服务之间的负载均衡
1585849876030

8. 服务降级

Hystrix 提供了线程池隔离的方式,避免服务器线程池耗尽,在一个服务无法使用时,还提供断路器的方式来处理问题服务,从而执行降级方法,返回托底数据。

Eureka,Robbin,Hystrix 都是 SpringCloud 技术栈中的组件。

使用Hystrix帮提供断路器和隔离,并最终服务降级
1585897439571

9. 海量数据

解决海量数据高并发的问题,可以基于 MyCat 实现数据库的分库分表。

基于MyCat实现分库分表
1585898484063

10. 微服务架构

在单独模块中再次拆分项目的方式称之为微服务架构,微服务架构也是分布式架构。

比如压力最大的商品模块,拆分为 商品模块 + 查询商品模块

微服务架构,在分布式架构的基础上再次拆分
1585899589634

11. 模块过多问题

为了解决模块过多,运维成本增加的问题,采用 Docker 容器化技术来帮助管理各个模块的部署,还可以通过CI、CD持续集成,持续交付,持续部署。

Docker容器化技术
1585909219218

12. 分布式事务

最传统的操作事务的方式,是通过 Connection 链接对象的方式操作,Spring 也提供了声明式事务的操作。

为了解决事务的问题,使用 RabbitMQ 或者 LCN 等方式来解决。

13. 分布式锁

传统的锁方式,synchronized | Lock锁,在分布式环境下,传统的锁是没有效果的。

为了解决锁的问题,使用 Redis 或者 Zookeeper 来解决。

14. 分布式任务

在传统的定时任务下,由于分布式环境的问题,可能会造成任务重复执行,一个比较大的任务,需要可以拆分。

为了解决任务问题,使用 Redis + Quartz 或者 Elastic-Job 来解决。


01-Web技术架构演变
https://janycode.github.io/2018/05/25/14_微服务/00_技术架构/01-Web技术架构演变/
作者
Jerry(姜源)
发布于
2018年5月25日
许可协议