Spring Cloud? Kubernetes? Istio?服务治理方案怎么选
不同选择分别代表了两个方向:
- embedded component 内嵌组件 如(Ribbon,DiscoveryClient,Hystrix,Sleuth等)
- attached sidecar 附着挎斗 (如 kube-proxy, istio sidecar等)
- 业务应用的技术栈选择更加灵活
- 服务治理的配置与业务应用分离
- 服务治理的配置对于DevOps人员更加友好
- 服务治理相关功能的演进速度更快
- 熔断、限流等需要DevOps人员不止关注到业务应用,还需要对不同接口进行配置管理。可能需要和开发人员对齐不同接口的设计规格(流量、负载、可用性指标等)
- 根据老马对熔断的描述,熔断不单单是断掉就万事大吉,需要我们关注降级处理方案(fallback)(注1),而这些istio并未提供支持(注2,3)
- 灰度/金丝雀发布在istio中的实现方案(注7、8)基于header(cookie),意味着可能会信息泄露或被客户端仿造,若内部组件控制则可能再次出现业务逻辑的耦合
- 灰度/金丝雀发布在某些需求下可能涉及业务逻辑(如:VIP会员可以尝鲜新版应用),需要定制化开发路由逻辑,而在sidecar中编入业务逻辑明显不符合其设计初衷
- 定位错误、调试、定制化开发不同程度上需要团队中有对应平台(Go,C++等)经验的自身工程师存在,并且该工程师需要高度适应平台的快速迭代
- sidecar不是特等公民,一样会崩溃、报错(注4)。monitor 和metrics等监控、报警相关基础设施及配置也是必经之路(注5)
- 两次请求转发带来的性能损耗不可忽视,在不同的挂载方案中性能损耗可能有数倍差别(注6),被挂载sidecar的应用thoughtput能力越强,性能损耗对其影响越大
- 团队主要/完全由熟悉Java/Spring 技术栈的工程师组成
- 对灰度发布、服务注册/发现等组件有定制化能力需求
- 有完整的熔断能力需求
- DevOps团队尚未具有可以自主完成高压问题的定位、处理能力
- 团队由多技术栈工程师组成
- 服务治理需要涉及不同平台、技术栈
- DevOps与开发团队通力合作,可以顺利完成对接口的设计规格(流量、负载、可用性指标等)配置管理
- DevOps团队或者对应技术专家能够自主完成sidecar或类似组件在Go、C++等技术栈下对高压问题定位、处理
- 有完整的sidecar监控、告警
- 不需要熔断,或者熔断方案中不需要服务降级能力
- 不需要业务敏感的路由、灰度发布能力
- 做个磁盘IO sidecar?
- 做个数据库连接池sidecar?(注9)
- 做个NFS sidecar?
- https://martinfowler.com/bliki/CircuitBreaker.html
- https://github.com/istio/istio/issues/20778
- https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking#arch-overview-circuit-break
- https://github.com/istio/istio/search?q=crash&type=issues
- https://istio.io/latest/docs/concepts/observability/
- https://istio.io/latest/docs/ops/deployment/performance-and-scalability/
- https://martinfowler.com/articles/feature-toggles.html
- https://istio.io/latest/blog/2017/0.1-canary/
- https://istio.io/latest/docs/ops/configuration/traffic-management/protocol-selection/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
性能超高的API网关:Fizz Gateway自研之路
#引言 在参与电商工作第一年,我从事客户端开发工作。虽然团队规模不大,但是对接的中间层团队人数,却相当于团队近四分之一的规模。工作第四年,我又加入国内一家知名的电商公司。这家公司的主要业务形态是特卖,中间层团队占团队的人数近三分之一。而现在,我所带领的团队,在发展初期,中间层团队也是接近这个规模。 三个团队都是电商团队,用户规模较大,在并发上要求较高,并且采用微服务架构,由中台底层提供各种电商服务(如订单、库存)和通用服务(如搜索),所以中间层团队需要经过各种授权和认证调用各个BU的服务,从而组装出前端适配的接口。因为对C端业务的接口繁多,所以中间层占用着团队宝贵的人力资源。而且团队成立时间越久,累积的接口越多,有效的管理如此繁多的接口是一个令人头疼的问题。 ##中间层的系列问题 开发调试问题 中间层在Web网站上的部署偏前,一般部署于防火墙及Nginx之后,更多面向C端用户服务,所以在性能并发量上有较高的要求,大部分团队在选型上会选择异步框架。正因为其直接面向C端,变化较多,大部分需要经常性地变更或者配置的代码都会安排在这一层次,发布非常频繁。此外,很多团队使用编译型语言进行编码,而...
- 下一篇
前端学数据结构与算法(十):深入理解快速排序
前言 上一章我们已经实现了快速排序,在数据理想化的情况下,上一章的快排性能确实也不错,但如果数据比较极端的,快排的O(nlogn)就不太稳定了,本章将介绍几种快排应对极端数据下优化方案;以及介绍partition操作延伸出来的快速选择算法在解决top K问题时高效。 优化分区点的选择 上一章我们直接选择了数组的范围内的第一个元素作为分区点,当数据有序度很低时,这样选择确实也没问题。但是如果本身就是一个有序数组,这个时候就会出问题: 因为partition的操作是以分区点为中心,将数组一分为二。而此时数组是有序的,也就是说每次选择的这个分区点无法将数组一分为二,会导致快排最终的复杂度退化为O(n²)。所以此时要改变选择分区点的规则。 三数取中 不仅是从头部,无论是从数组哪个位置,只要是单单选择一个位置,都有可能出现退化的情况。所以我们可以多选几个位置从里面挑一个出来。如从范围数组中的头、中间、尾选择三个元素,比较它们的大小,选择中间大小的值作为分区点。这样就能避免遇到有序数组时的退化情况,代码如下: const quickSort = arr => { const _quickSo...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器