《第一章:大系统小做-大贵妇服务化架构》
网站架构的优化: | 1.独立部署,避免不同的系统相互之间争夺共享资源(比如CPU,内存,磁盘等) |
2.webServer集群,提高容错性 | |
3.部署分布式缓存系统,使查询操作尽可能在缓存命中 | |
4.数据库实施读写分离改造,实现HA(High availabiliy高可用性)架构 | |
5.利用CDN加速系统响应(将图片,音频,视频,脚本文件和html网页放在CDN上) | |
6.业务垂直化,降低耦合,从而实现分而治之的管理 |
集群(cluster)技术可以将多台独立的服务器通过网络关联起来,形成一个有效的整体对外提供服务。使用集群的意义就在于其目标收益远高于所付出的实际成本和代价。
对于无状态的webServer节点,使用Nginx来实现负载均衡调度,线上环境中,Nginx也应该具备高可用性,可以依靠DNS轮询来实现。(如果是云主机,则可以使用云服务商提供的SLB服务)
集群 | 集群是指将多台服务器集中在一起,目的是实现同一业务;串联工作 |
分布式 | 将不同的业务分布在不同的地方,目的是实现不同的业务;并联工作 |
1.将外部的HTTP协议适配为内部的二进制协议 |
2.聚合操作 |
3.集成一些公共逻辑 |
网关的作用: | 网关层作为整个系统的入口,所有的前端请求都需要通过它来访问后端服务,并有它统一负责处理一些公共逻辑,比如:鉴权,流控,日志记录,安全防护,负载均衡,灰度发布等。 |
灰度发布: | 灰度发布的目的就在于试错,尽可能的控制和缩小问题的影响范围。能够给通过收集用户的使用反馈来更好的完善和改进当前产品,不断的试错,以确保最终上线的稳定。 |
灰度发布: | 以白名单作为灰度策略的,那么当用户发起http请求后,嵌入在Nginx中的Lua脚本会首先从Header中获取出token并解析出用户的UserId,在请求Redis验证当前的UserId是否包含在白名单中,只有那些包含在白名单中的用户,才允许访问灰度环境中的新版本应用。 |
分布式多活数据中心: | 将2个或2个以上的数据中心同时并行对外提供服务网,实现了对资源的充分利用,避免了资源利用率低下的诸多问题。 |
分布式多活数据中心需要考虑的问题:
1.多数据中心之间需要打通内网专线通道 |
2.RPC调用需要做到就近调用 |
3.数据同步问题 |
RPC调用主要需要经历的三个步骤:
1.底层的网络通信协议处理 |
2.解决寻址问题 |
3.请求/响应过程中参数的序列化/反序列化工作 |
zookeeper面临的问题:
1.服务扩容时,应用启动异常缓慢 |
2.冗余的服务配置项会增加存储压力和扩大网络开销 |
3.典型的CP原则,协议的强一致性中间件,写操作存在单点问题,无法通过水平扩容解决。当客户端发送写请求时,集群中的其他节点会优先转发给leader节点,由leader节点来负责具体的写入操作,只有当集群中>=N/2+1个节点都同步成功后,一次写操作才算完成。当服务扩容时,TPS越高,服务注册时的写入效率就越低,这回导致上游产生大量的请求排队,表象就是服务启动变得异常缓慢。 |
Google Dapper【同产品:Zipkin,sky walking】
1.服务性能低损耗 |
2.业务代码低侵入 |
3.监控界面可视化 |
4.数据分析准实时 |
调用链的基本功能:
1.跟踪每个请求的完整调用链 |
2.采用调用链上每个服务的执行耗时,以及整合孤立日志。 |
AOP: | 面向切面编程,在编译期或运行期通过字节码增强技术来实现以不改变源码为前提,通过前后横切的方式,动态为程序添加新功能的一种思想。 1.静态编织 2.动态编织 |
OOP: | 针对的是业务处理过程的实体,属性,行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。 |
双亲委派机制: | JVM中的类加载器默认基于的是双亲委派模型的类加载机制,当类加载器在对目标类进行加载的时候,首先会委派给它的父类加载器,然后再由它的父类继续向上委派,直到委派给最顶层的Bootstrap ClassLoader。当委派结束后,Bootstrap ClassLoader会尝试发起加载,加载失败时则回源给它的子类加载器。 双亲委派模型是一种自下而上委派,自上而下加载的类加载机制,通过它能够很好的确立类在整个虚拟机中的全局唯一性和统一性。 |
《第三章:削峰填谷-流控方案》
问题: | 如果不对流量进行合理的管理,肆意放任大流量冲击系统,将会导致一系列的问题出现,比如一些可用的链接资源被耗尽,分布式缓存的容量被撑爆,数据库吞吐量降低,最终导致系统产生雪崩效应。 |
方案: | 通过扩容,静态化,限流,缓存,队列 |
单台变集群 | 单台服务器的处理能力有限,当一台服务器的处理能力接近或已超出其容量上限时,采用集群技术对服务器进行扩容,可以很好的提升系统整体的并行处理能力。在集群中,节点的数量越多,系统的并行处理能力和容错性就越强。 |
静态化 | 系统要将动态数据和静态数据进行分而治之,用户对静态数据的访问,应该避免请求直接落到企业的数据中心,而是应该在CDN中获取,以加速系统的相应速度。 |
限流 | 大促时,热卖商品会导致访问骤增的同时会带来读/写流量的骤增,因此需要采用合理有效的限流手段对系统做好保护,毕竟不是任何场景都可以通过缓存和服务降级等技术实现的,比如系统中的写服务(用户下单,库存扣减,商品评论) |