本文总结了当前主流的发布策略和性能参数,每个发布策略的优劣,适用性,让开发人员特别是架构师对现代发布技术有一个更为清晰全面的认识,对发布策略做出正确的选型和实践。
两种架构:
-说明代表框架主从架构简单,高效,但主节点存在单点问题Storm、Spark对称架构复杂,效率较低,但无单点问题,更加可靠,集群启动的时候会进行一个选举,选出一个主的出来Zookeeper、Kafka基本的服务化框架包括如下模块:统一的RPC框架,服务注册中心,管理平台。 有了这三个模块,就能实现基本的服务化。下面对三个模块进行具体分析。
常见的 MQ 产品包括 ActiveMQ、RabbitMQ、RocketMQ、Kafka 。
-ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级10万级时效性ms级us级ms级ms级以内可用性高 (主从架构)高 (主从架构)非常高 (分布式架构)非常高 (分布式架构)功能特性成熟,文档较多,各种协议支持较好并发能力强,性能好,延时低,管理界面丰富成熟,功能比较完备,扩展性佳只支持主要的功能,像消息查询、消息回溯等功能没有提供,在大数据领域应用广NoSQL 泛指非关系型数据库,是为了处理高并发读写、海量数据的高效率存储和访问、高扩展性和高可用性而产生的。
分类相关产品典型应用数据模型优点缺点键值对(Key-Value)存储Redis、Voldemort、Berkeley DB内容缓存、处理高访问负载一系列键值对快速查询存储的数据缺少结构化列存储数据库Cassandra、HBase、Riak分布式文件系统以列簇式存储,将同一列数据存在一起查询速度快,可扩展性强,更容易进行分布式扩展功能相对局限文档型数据库MongoDB、CouchDBWeb应用一系列键值对数据结构要求不严格查询性能不高,缺乏统一的查询语法图形数据库Neo4j、InfoGrid社交网络,推荐系统,专注于构建关系图谱图结构利用图结构相关算法需要对整个图做计算才能得出结果,不容易做分布式的集群方案Memcache:代码层次类似 Hash
支持简单数据类型;不支持数据持久化存储;不支持主从同步;不支持分片。Redis:
数据类型丰富;支持数据磁盘持久化存储;支持主从同步;支持分片。有持久化需求或者对数据结构或处理有高级要求的应用应该选择 Redis,其他简单 key-value 的存储选择 Memcache。
1、配置中心
携程开源分布式配置中心 https://github.com/ctripcorp/apollo,需要自建;阿里云acm https://www.aliyun.com/product/acm,在线服务。2、任务调度
分布式任务调度平台XXL-JOB https://github.com/xuxueli/xxl-job,需要自建。3、持续集成
应用机器基本是预先静态分配好的,原来应用 A 住在这 n 台机器上,那么下次升级发布的应用 A 也住在这 n 台机器上,这种方式称为单服务器组发布。
-介绍优势不足适用场景蛮力发布先将老版本全部下掉,再将新版本发到机器上去简单成本低服务中断用户受影响,出了问题回退也慢开发测试环境;非关键应用金丝雀发布对蛮力发布的一种简单改进发布方式。先发1台(灰度测试),然后再全量发布用户体验影响小,灰度发布过程出现问题只影响少量用户发布自动化程度不够,发布期间可引发服务中断新版功能/性能存在风险;用户体验要求较高的网站业务场景;缺乏足够的自动化发布工具研发能力滚动式发布在金丝雀发布基础上的进一步优化改进。先发1台(灰度测试),再发若干台,然后再全量发布。每次发布时,先将老版本流量从LB上摘除,然后清除老版本,发新版本V2,再将LB流量接入新版本。这样可以尽量保证用户体验不受影响用户体验影响小,体验较平滑发布和回退时间比较缓慢;发布工具比较复杂,LB需要平滑的流量摘除和拉入能力用户体验不能中断的网站业务场景;有一定的复杂发布工具研发能力随着云计算和虚拟化技术的成熟,特别是容器等轻量级虚拟化技术的引入,计算资源受限和申请缓慢问题已经逐步解决,可以做到弹性按需分配。为一次发布分配两组服务器,一组运行现有的 V1 老版本,一组运行待上线的 V2 新版本,再通过 LB 切换流量方式完成发布,这就是所谓的双服务器组发布方式。
-介绍优势不足适用场景蓝绿发布发布时通过LB一次性将流量从蓝组(V1)直接切换到绿组(V2),不经过金丝雀和滚动发布;出现问题回退也很直接,通过LB直接将流量切回蓝组即可。发布初步成功后,蓝组机器一般不直接回收,而是留一个待观察期,观察期过后确认发布无问题,则可以回收蓝组机器升级切换和回退速度非常快切换是全量的,如果V2版本有问题,则对用户体验有直接影响;需要两倍机器资源对用户体验有一定容忍度的场景;机器资源有富余或者可以按需分配;暂不具备复杂滚动发布工具研发能力金丝雀发布对蓝绿部署的一种简单优化,发布时先从绿组拉入1台灰度,待灰度验证通过再发全量有一个生产流量的灰度验证过程,可以减轻V2可能有问题的风险和影响面滚动式发布对蓝绿和金丝雀发布的进一步优化。按批次增量滚动发布。发布时先从绿组拉入1台灰度,再发若干台,然后再全量发布。用户体验影响小;升级切换和回退速度比单服务器组滚动发布要快(LB切流量即可)需要两倍机器资源;发布工具比较复杂,LB需要流量切换能力用户体验不能中断的网站业务场景;机器资源有富余或者可以按需分配;有一定的发布工具研发能力通过性能指标的波动大小,可以充分体现出服务是否稳定、健壮。
TP 性能:指在一定时间段内,统计该方法每次调用所消耗的时间,并将这些时间按从小到大的顺序进行排序,取第 50% 的那个值作为 TP99 值,TP50、TP99、TP999 同理。
报警建议:当 TP99 性能指标连续 5 次超过配置的阀值则报警,且在 5 分钟内只报一次警。
方法可用率:指在一定时间段内,方法可用率 = 调用成功的次数 / 调用的总次数。
报警建议:当方法的可用率连续 10 次小于 99% 则报警,且在 5 分钟内只报一次警。
QPS:每秒处理的查询量。 TPS:
