大家好,我是 树下搜胡(名字来源于之前看过的一本小说,可能大家都看过,改了一个字O(∩_∩)O哈哈~),一个在互联网行业搞了10多年的技术老人,一直战斗在技术一线,攻坚克难,目前在某不知名互联网公司担任架构师一职,感谢大家关注;以后多交流。
本文主要说明通过服务部署看性能是否提升的实践试验方法
如有需要,可以参考
如有帮助,不忘 点赞 ❥
微信公众号已开启,cto联盟,没关注的同学们记得关注哦!
1、 单机版部署
1.1. 部署架构
数据库和应用程序在同一个物理机,数据库和应用程序将会存在资源争用情况。
1.2. 压测情况
聚合报告: 平均响应时间,吞吐量(每秒的请求数量)
TPS曲线图:
RT曲线图:
极端苛刻要求: 每一个接口都是几十ms, 100ms以内
2、 分离模式
2.1. 分离部署架构
服务器通信使用内网通信,因此网络的影响可以忽略不计。(局域网内进行通信)
2.2. 压测情况
聚合报告: 提高 400QPS
TPS曲线图:
RT: 响应时间
CPU,IO,内存 对于程序是独占模式
3、 分布式部署
3.1. 部署架构
流量估算: 单机:3288 2台机器: 3288 * 2 = 6500 +
3.2. Openresty
.configure
make && make install
默认安装:/usr/local/openresty
配置:
3.3. 压测情况
聚合报告:
TPS曲线图:
普通配置的服务器: 把多个服务部署在一个服务器,性能不太好,稳定性比较差; 高性能服务器: 64cpus 128G IBM Unix (200w 美金) ------ 单机部署 ---- 重启
4、 K8s可伸缩容
4.1. 云原生
阿里巴巴: 去年项目全部上云 (下单:50w+/s)
云原生:
海量的服务器所组成一个环境,而这个环境可以看成一个整体,就是一台计算机(cpu:和 ,内存:和)
问题: 难以管理 Openstack 构建企业级私有云 (虚拟机) 容器(docker容器) Docker容器中部署很多服务,海量服务需要部署,意味着有海量的容器(google:2亿容器/day)
问题: 难以管理 Kubernetes 云原生: 1、容器化 (所有的项目都必须跑在容器中) 2、微服务 (按照function进行拆分) 3、DevOps 开发+运维 4、ci/cd CNCF : service mesh 服务网格架构加入云原生 (服务限流,熔断,治理…… istio)
架构师: 构建适合云原生的项目架构即可
Serverless ---- 无服务
4.2. 部署架构
POD 服务如果发现cpu,内存利用率过高,立马进行pod扩容,以方便应对大流量的来袭。因此还需要部署HPA(自动触发扩容,缩容)
压力测试: HPA 内存,cpu使用率升高,扩容,并发量提升
4.3. 部署
1、deployment部署资源对象 2、service 资源对象 3、Ingress 资源对象 4、HPA资源对象
单个POD 吞吐能力:(1cpus, 2G内存)
TPS:
4.4. 扩容实现
可以发现当流量洪峰来临时,pod副本发生了扩容;