《静儿的服务治理私房菜》服务治理和架构

简介: 《静儿的服务治理私房菜》服务治理和架构

1.2 服务治理和架构


  我在硅谷那段时间,每天早上都单独要一份omelet,就是美式煎蛋。2个鸡蛋和黄油是必选的,另外需要自己在需要放的材料上打钩,有多种芝士可选,另外还可以勾选洋葱,蘑菇,培根,西兰花等。


  回国之后,经常也会自己这样做早餐,只是总会在摆盘时,用圆火腿斜切两片,然后将这这个片再四六分的切一刀,大的两个半片拼起来拼成一个心形摆到盘子的一边。在高脚杯中倒入热牛奶。这就是简单而精致一天的开始。


  做omelet的原则是——鸡蛋和黄油必选,其他可选。架构也有自己的设计原则。这些原则中很多都是在架构一开始的设计中就要考虑进去的,这样在出现任何问题时,我们都能够及时的处理,和把问题影响范围缩到最小。


  总的来说,有以下原则。


  1.N+1设计


  要确保任何你所开发的系统在发生故障时,至少有一个冗余的实例。


  一般初创的项目,考虑到刚开始没有什么量,都是以最小单元上线。平常所说的最小单元就是一主一备两个服务,来保证高可用。


  2.回滚设计


  确保系统可以回滚到以前发布过的任何版本。


  现在大家都在使用一些持续集成和自动化部署工具,上面大家会感觉理所当然的看到回滚按钮,点击进入可以选择回滚到上次版本或者回滚到某一个特定版本。


  实现原理也很简单:最近的几个版本,在新版发布时旧版本会被重命名,命名时后缀上时间等版本信息。点击回滚时直接将被重命名的版本改回来即可。但是将所有历史版本都保留会很占用资源。所以较旧的版本还是会从SVN、GIT等版本控制管理工具上重新编译发布。


  3.禁用设计  


  关闭任何发布的功能。


  当一个功能出现严重问题不得不关闭时,如果关闭整个系统代价就有点大了。所以要有单个功能的开关。比如在交易系统中,可能会遇到某些银行或者其他支付渠道故障,需要暂时关闭某些支付渠道。如果遇到链路积压,则需要关闭整个支付功能,让用户采用现金或者其他支付手段。这样的代价要比多次发起退款和支付,用户和商家都无法分辨是否实际支付成功代价要小很多。


  4.监控设计


  在设计阶段就必须要考虑监控,而不是在实施完成之后补充。


  因为设计阶段设计人员需要比较清醒,自己想要达到什么效果,关心的指标是什么。将监控放到设计阶段,开发阶段就可以做合理的埋点。这要比实施完成后再加监控对系统的影响要小,代价要低。


  5.设计多活数据中心


  不要被一个数据中心的解决方法把自己限制住。


  随着企业数据和IT资源不断集中,风险也相应集中,为减少或消除停机对业务可用性造成的影响。金融企业一般会按照“两地三中心”的模式建设数据中心。所以跨机房之间的通信成了企业不得不解决的问题。这个在后面的文章中会相信讲到。


  6.只用成熟的技术


  成熟的技术代价低,避免了软件本身的问题造成排查和解决困难。


  笔者之前有次面试失利,自觉技术不错,心里想不明白,所以找来朋友帮我分析。朋友看了我的简历,给出中肯的评语:“码农思维”。里面写到自己正在自己研发一个搜索引擎框架。朋友就说:“现有框架不能满足需求吗?你这种思维,大家跟着你干会很累,还不出业绩。”


  成熟的技术通常开发成本低,开发效率高,可扩展能力强,文档丰富,还有很多社区,人员变动的替换成本较低,是业务部分的优先选择。


  7.异步设计


  一个系统各个模块很可能处理能力,相应能力不同。如果采用同步设计,遇到其中一个环节因为什么原因造成大量的连接超时和读写超时,可能会导致整个系统无法运作。在这个互联网讲究高并发的时代,同步设计难以发挥作用。


  8.无状态设计


  无状态设计利于横向扩展和负载均衡,大大提高了可伸缩性。


  有状态就是有数据存储功能,线程不安全。无状态则天生就是数据安全的。J2EE的session就是有状态的,通常被认为是不好的设计,大部分J2EE中间件在集群时都需要进行session同步。


  9.小步快跑设计


  小构件,小发布,快试错 就算是在进行重构的时候,永远都不建议把所有代码都调整完成之后在进行测试。小步快跑的研发方式不是敏捷开发的专利,而是适用于各类软件开发应用中的一个基础准则。小步快跑的设计思想体现了简单,快速反馈的特点。


  10.水平扩展非垂直升级


  必要时把需求分为多个系统,而不是升级原有的系统。


  在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即听过提高系统部件的能力来实现。而水平扩展模型中,我们不是通过增加单个系统成员的负荷而是简单的通过增加更多的系统成员来实现。微服务是水平扩展的一个例子。不要把所有的功能都集中在一个系统里面。


  11.设计至少有两个步骤的前瞻性


  想的更远一点,减少重构的次数。


  重构代码是危险的,代码的变化会导致测试的压力很大。除非有必要的理由,否则不要轻易重构。


  12.故障隔离设计


  实现隔离故障设计,通过断路避免故障传播和交叉影响。


  异步设计本身也是遵循故障隔离原则的。异步I/O编程,异步HTTP,异步SOAP,异步SMPP。基于Reactor模型统一调度的长连接和短连接协议栈,无论性能,可靠性还是可维护性,都可以秒杀传统基于BIO开发的应用服务器和各种协议栈。


  13.自动化


  手工操作时效性无法保证,而且“常在河边走,哪有不失鞋。“看起来简单的东西也有可能出错。


  忙中出错是经常会发生的事情。特别的是针对数据库操作,如果更新时少加了一个条件,可能会对大批数据产生影响。所以,大公司会使用一种DBA平台的内部网站页面来操作线上数据库。这个平台会对查询时间、执行时间,对数据的影响来做判断,如果判断影响大,会要求用户确认,还会根据影响程序做出上级审批,阻止运行等。


  架构设计的这些原则建议读者也像笔者这样在纸上画一下,做一个梳理。


1112728-20170927211948762-864897628.png


  架构设计很多需要考虑的问题可以通过服务治理来解决和简化。所以服务治理也是在架构设计开始就需要考虑的问题。


相关文章
|
1月前
|
负载均衡 算法 应用服务中间件
深入探索微服务架构中的服务治理
【10月更文挑战第15天】深入探索微服务架构中的服务治理
31 0
|
1月前
|
监控 安全 Java
深入探索微服务架构中的服务治理
【10月更文挑战第10天】深入探索微服务架构中的服务治理
34 0
|
3月前
|
Prometheus 监控 Java
微服务架构下的服务治理策略:打破服务混乱的惊天秘籍,开启系统稳定的神奇之门!
【8月更文挑战第7天】微服务架构将应用细分为可独立部署的小服务,提升灵活性与可扩展性。但服务增多带来治理挑战。通过服务注册与发现(如Eureka)、容错机制(如Hystrix)、监控工具(如Prometheus+Grafana)、集中配置管理(如Spring Cloud Config)和服务网关(如Zuul),可有效解决这些挑战,确保系统的高可用性和性能。合理运用这些技术和策略,能充分发挥微服务优势,构建高效应用系统。
62 1
|
4月前
|
运维 Prometheus 监控
微服务架构下的服务治理实践
【7月更文挑战第27天】在微服务架构的浪潮中,服务治理作为确保系统稳定性和高可用性的关键手段,其重要性日益凸显。本文将探讨微服务架构下服务治理的核心要素,包括服务发现、配置管理、流量控制等,并结合实例分析如何有效实施服务治理策略,以提升系统的弹性、监控能力和安全性。通过本文,读者将获得一套实用的服务治理框架,以及面对复杂服务交互时保持清晰治理视野的方法。
|
3月前
|
存储 监控 负载均衡
微服务架构中的服务治理与监控技术
【8月更文挑战第3天】微服务架构中的服务治理与监控是确保系统稳定、高效运行的重要手段。通过构建注册中心实现服务的自动注册和发现,通过部署监控工具实现对服务的全面监控,可以有效地提高系统的可靠性和可用性。未来,随着技术的不断发展,服务治理与监控技术也将不断完善和优化,为微服务架构的广泛应用提供更加坚实的支撑。
|
3月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
5月前
|
敏捷开发 负载均衡 Java
微服务架构下的服务治理策略
【6月更文挑战第18天】在微服务架构日益成为企业IT架构转型的标配时,如何有效管理与维护这些服务成为了一个挑战。本文将探讨微服务架构下的服务治理策略,包括服务发现、配置管理、负载均衡、故障转移和熔断机制等关键技术点,旨在为读者提供一套完整的服务治理解决方案。
|
6月前
|
存储 弹性计算 运维
探索微服务架构下的服务治理
【5月更文挑战第18天】 在当今软件工程领域,微服务架构因其灵活性、可扩展性以及促进团队协作等优势而受到广泛青睐。然而,随着系统规模的增长和服务数量的膨胀,服务治理成为确保系统稳定性和高效性的关键因素。本文将深入探讨微服务环境下的服务治理实践,包括服务发现、配置管理、负载均衡、故障处理等关键方面,旨在为开发者提供一套行之有效的服务治理策略。
|
6月前
|
运维 负载均衡 监控
探索微服务架构下的服务治理策略
【5月更文挑战第14天】在当今软件开发的世界中,微服务架构因其灵活性、可扩展性和技术异构性而受到青睐。然而,随着系统向微服务模型迁移,服务治理成为确保系统整体稳定性和高效通信的关键。本文将探讨在微服务架构中实施有效服务治理的策略,包括服务发现、配置管理、负载均衡、熔断机制以及服务监控等关键要素。通过深入分析这些策略如何协同工作以维护系统的弹性和响应能力,我们旨在为开发和运维团队提供指导性的建议。
|
6月前
|
安全 Java 开发者
探索微服务架构下的服务治理策略
【5月更文挑战第28天】在当今快速发展的云计算和容器化技术浪潮中,微服务架构凭借其灵活性、可扩展性和容错性等优势成为众多企业转型的首选。然而,随着服务的不断拆分与细化,服务治理成为了确保系统稳定性和高效运作的关键挑战。本文将深入分析微服务架构中的服务治理策略,探讨如何通过合理的设计和技术选型来提升系统的可维护性和性能,同时保障服务的高可用性和安全。
91 0