P8实战(一):架构概论,从过去到未来
P8架构概论
从过去到未来
缓冲、缓存、复用、分治、亲密性、技术选型
回顾一下软件工程学中的几个重要词汇,整个信息化进程中,做调优离不开这些:
- buffer 缓冲,包括:消息队列 ;操作系统中的IO方式(积攒一个buffer),解决上下游处理速度不匹配的问题;批量计算;啤酒理论
- cache 缓存,包括:pagecache页缓存;缓存热点数据提升io速度;CPU的多级缓存;数据库缓存中间件
缓冲是解决单次大小问题的,缓存是用来复用的 - pool 复用,池化,包括:连接池、线程池、对象池、字符串常量池、享元,减少三次握手成本、线程创建成本等各种成本
- sharding 分治,单机多机都使用,包括集群:分片集群,降低复杂度。HashMap也可以。
- sticky 亲密(粘性):某一个线程亲密到某一个CPU上;threadlocal;数据路由相同ip或session或商品分配到不同的负载机器上。
(可以通过配置负载均衡层的策略实现。例如,并发到来的时候,从C1客户端发来的请求被转发Server1上,从C2客户端发来的请求被转发到Server2上,这样在单机使用线程池,在线程池中单机加锁,要优于在多机加分布式锁,因为分布式锁要消耗网络通信的成本)
再比如,你小区有两个门,进门需要登记。你这次从北门登记过了,下次再从北门过就不用登记了,你从南门的走话还要再登记。 - balance/trade-off 权衡:做技术选型,相同的需求有很多方法能够实现,这时候你需要选择
QPS、TPS、RT、PV、UV、并发数、线程数
查看cpu核心数:lscpu
一般推荐:线程数量是CPU数量的2倍,是根据上面的公式,以挂起时间、运行时间1:1的比例计算的。
推荐一些书:
服务拆解:ESB企业服务总线、SOA->微服务
单体,全量:
SOA,ESB,微服务:
拆解,分层:
- 按照流程拆解,是最常见的方法。如,TCP/IP协议
- 按照服务拆解,如SOA,服务可大可小,偏业务的角度
- 按照功能拆解,登录(权限认证),购物,支付,比服务更小,最终功能变成独立的服务运行起来。偏向于微服务。
你做业务拆分的时候,要考量开发的成本,合理根据业务需求,规划企业架构,而不是因为技术而技术。
拆分的过细,反而会增加负担。
AKF划分
三高:高可用,高性能,可扩展
x轴:数据的复制是全量的,基于主备,可以完成主从的读写分离,解决可用性,性能优化。
y轴:基于业务的拆分,业务太大超过了CPU算力或超过了硬件的负载,这时候我们按服务拆分。可以将不同的业务放进不同的Redis当中
z轴:在已经按照业务拆分了的情况下,并发量仍然很大,这时解决倾斜的方式:sharding,例如 0-99,100-199,...
一般用代理来实现负载均衡。