Java进阶架构师必看:15次架构演进详解

15次架构演进实战,让你清晰明白从一个中小企业的项目架构到一个大型互联网平台是如何进行架构演进过程的!

大众创业,万众创业

大多数企业都是中小企业(除 了国内上市公司)

 

所有的大企业都是从小公司一步步的发展起来的

目前中小企业组织系统架构设计存在哪些问题?

1. 通病:企业组织管理混乱

原因:没有完善的企业组织架构(分工和责任不明确)

2. 部门协同差劲

原因:企业没有规范的管理流程,部门之间沟通机会少,企业文化融合氛围不浓等等造成的。

3. 组织效率低:

原因:多方协同出了问题

一. 战略方向不明确,组织缺乏前瞻性

道 天 地 将

法务实,务虚

初心:解决这个社会的问题,解决某个行业的痛点,我希望来做的更好

使命,愿景,价值观

考核:业绩和价值观 5/5开

组织结构设计

企业战略

二. 部门职责不清晰,重叠和空白&管理层级多,管理角色错位

扁平化 事业部 阿米巴

三、企业内控体系不完整,责权不统一&部门协同差,组织效率低

权 责 利

中小企业IT系统架构面临的问题:

  • 当业务发生变化:不断的在原有系统上打补丁
  • 当业务发展时,系统不断出现各种瓶颈
  • 卡顿,数据库经常锁死
  • 用户网站打不开,白屏
  • 流量一上来就容易挂

技术团队的现状

技术团队人数不操作 50人

服务器数量 10 - 30台

带宽:100 MB

中小企业从零开始目前项目开发的现状:

应用系统开发

前端开发 : Vue.js , bootstrap

SSM: SpringMVC , SpringBoot,MyBatis

Tomcat

数据库开发:MySQL: CRUD

测试:开发人员自己测试 没有压测 不清楚系统的负载边界

线上部署:应用服务器和数据库服务器在同一台服务器上Linux环境没有装过JDK,MySQL,如何参数的配置和调优 .

为什么会出现这么多的问题呢?

原因只有一个:企业没有一个优秀的架构师

怎么样才能成为一名优秀的架构师

得有实战经验实战的应用场景

三、历经15次技术架构演进过程

 

首先:定义当前企业的架构,目前所处的一个阶段并且绘制出 架构图谱

定位问题:根据实际情况制定新的架构图谱(重构)

1. 单体架构

 

Tomcat + 数据库部署在同一台服务器上的

问题:- 随着用户增长,tomcat和数据库之间相互竞争服务器资源- 单机性能不足以支撑业务- 整个服务器挂掉

2. Tomcat和数据库分开部署

 

Tomcat 和数据库分别独占服务器资源,显著提高两者的性能

问题:- 用户增长:读写都在同一个数据库 压力很大,数据库就成了瓶颈- 第一步:把应用服务器和数据库进行分离,独立部署,Tomcat和数据库服务器内存扩大数据量小的时候:导出SQL,数据多:数据文件的迁移

3. 引入本地缓存和分布式缓存

 

 

引入本地缓存和分布式缓存

  • Tomcat服务器上或同JVM中增加本地缓存
  • 在外部增加分布式缓存
  • 缓存热数据和静态html页面
  • 通过缓存把大多数的请求在读写数据库前拦截掉
  • 会应用到哪些技术栈呢?
  • memcahed 作为本地缓存
  • Redis作为分布式缓存

问题:缓存一致性,缓存穿透/击穿,缓存雪崩热点数据集中失效

问题:缓存扛住了大部分用于请求,用户增长,并发的压力就会落到tomcat上 ,响应很慢

4. 引入反向代理实现负载均衡

 

多台服务器上分别部署tomcat ,使用Nginx把请求分发到每一个tomcat中

假设:

  • Tomcat最多支持 100并发
  • Nginx请求分发 500个Tomcat 就能扛住 50000个并发
  • Session共享
  • 文件上传下载问题

5. 数据库读写分离

 

读库

写库

MyCat 等等数据库中间件

数据同步,数据一致性问题

问题:- 业务增长,不同业务之间访问差距较大,相互竞争数据库资源,影响性能

 

6. 数据库按业务分库

 

 

问题:- 用户增长:单机的写库会逐渐达到性能瓶颈

 

7. 把大表拆分成小表

 

 

引入本地缓存和分布式缓存

 

商品ID

问题:- 数据库和Tomcat能够水平扩展,Nginx就会成为系统的瓶颈

 

8. 使用LVS或者F5使用多个Nginx负载均衡

 

 

问题:- LVS单机

 

9. 通过DNS轮询实现机房间的负载均衡

 

 

通过DNS轮询实现机房间的负载均衡

通过DNS服务器轮询或者其他策略

千万级别到亿级别 通过增加机房来解决

 

10. 引入NoSQL数据库和搜索引擎

 

 

引入NoSQL数据库和搜索引擎

对于全文检索,可变数据结构 数据库天生不适用

海量文件存储:HDFS

Key Value类型的数据:HBase和Redis

全文检索:ElasticSearch

 

11. 把大应用拆分成小应用

 

 

把大应用拆分成小应用

 

  • 按照业务板块来划分应用代码
  • 单个应用职责很清晰,相互之间做到独立升级迭代
  • 应用之间会涉及公共配置
  • 分布式配置中心 Zookeeper来解决

12. 复用的功能抽离成微服务

 

 

复用的功能抽离成微服务

13. 引入企业服务总线屏蔽服务接口访问的差异

 

 

引入企业服务总线屏蔽服务接口访问的差异

 

14. 引入容器化技术实现环境隔离与动态服务管理

 

 

引入容器化技术实现环境隔离与动态服务管理

 

目前最流行的技术是Docker

容器管理:K8S

双11来之前:

在现有的机器集群上划分出服务器来启动Docker镜像,增强服务的性能

双11之后:

活动结束后:就可以关闭镜像,对机器上的其他的服务不会造成任何影响

 

15. 以云平台承载系统

 

 

以云平台承载系统

所得系统都部署在公有云上

2019年双十一 天猫 2684亿 阿里巴巴所有核心系统全面上云

IasS : 基础设施即服务

PaaS : 平台即服务,MaxComputer ,Flink - Blink ,Hadoop技术组件

SaaS: 软件即服务 (行业解决方案视频转码服务,邮件服务,个人博客等)