目录
应用架构
一、单机调优
早年间的项目大多采用 mvc 开发。
 
1)特点
每个项目成一个 mvc 结构,部署在应用服务器上( tomcat 、 jboss 、 websphere , weblogic )。
(课题: tomcat 源码剖析)
随着业务扩张,需求迭代,项目变得越来越大,一个 war 包动辄几百兆。
崇尚调优, jvm 单节点调优甚至接近于强迫症的地步。(课题: jvm 性能调优)
二、动静分离
早年间的 Apache+tomcat ,后被 nginx 几乎一统江山。( 前后端开发模式的演进: mvc 页面嵌套 → 接口化)
 
1)方案
- 静态响应:tomcat对静态文件响应一般,提取静态文件,直接由nginx响应
 - 动态代理:后端api通过代理转发给tomcat应用机器
 
2)特点
- 开发层面调整:项目结构要同步调整,由原来的一体化mvc转换为后端api+前端形式。
 - 前后协调:前后端的分工变得更明确,互相并行开发,独立部署,但也带来了接口协调与约定等沟通问题
 - 跨域问题:后段与前端如果域名不同,可能存在跨域问题(head头,jsonp等手段可以解决)。
 
三、分布式
单纯的动静分离只解决了自己服务的项目结构,跨项目接口调用时,必须经过 rest 请求,不利于服务之间的交互。
淘宝 V3.0 , HSF 出现,服务化导向,架构师忙于 SOA 和系统关系的梳理。
 
1)方案
- 公共服务:重复开发的基础服务提取出来,形成服务中心,避免重复造轮子,降低成本,架构团队出现。
 - 独立性:各自服务独立部署升级,粒度更细,低耦合,高内聚
 - SOA理念诞生:服务治理的范畴,重在服务之间的拆分与统一接口
 
2)技术手段
异步化:
- rabbitmq (课题:滴滴打车超时架构设计)
 - rocketmq(课题:滴滴打车排队原理与剖析)
 - kafka (课题:海量订单数据同步)
 
Rpc:
- dubbo (课题:dubbo核心源码剖析,zookeeper源码剖析)
 - Rpc框架(课题:Rpc核心源码与手写Rpc,netty通信与进阶)
 
3)特点
- 界限把控:服务的粒度、拆分和公共服务提炼需要架构师的全局把控。设计不好容易引发混乱
 - 部署升级:服务数量增多,人工部署变的不现实,必须借助自动化运维
 
(课题:高效运维篇, docker 、 k3s 、 jenkins 、 Apollo 应用发布实战)
- 服务可用性:抽调的微服务因需要被多个上层业务共享,可用性等级变高,一旦down机就是灾难
 - 熔断和限流:做好服务熔断和限流,提防服务单点瓶颈造成整个系统瘫痪。短信提醒失败不要影响下单。
 
(课题: cloud alibaba , sentinel 限流)
四、微服务

1)方案
- 微服务是基于SOA思想,将系统粒度进一步细化而诞生的一种手段
 - 中台化得以实现,各个中心以及前端业务拆解为多个小的服务单元。
 
2)技术手段
- 微服务经历了从1.0(cloud)到2.0的演化(service mesh),目前企业中主流的解决方案依然是cloud全家桶
 - springcloud (课题:springcloud微服务前沿技术栈,spring、springboot源码剖析)
 
3)特点
- 服务拆分:粒度并非越小越好。太小会带来部署维护等一系列成本的上升。(课题:skywalking微服务监控)
 - 接口约束:系统增多,各个服务接口的规范化日益重要,要求有统一的服务接口规范,推动企业消息总线的建设
 - 权限约束:接口不是任意想调就可以调的,做好权限控制,借助oauth2等手段,实现服务之间的权限认证。
 
五、总结与思考
- 如何理解微服务与SOA,分布式的关系?
 - 常用的分布式服务框架有哪些?
 










