文章首发公众号:海天二路搬砖工
0. 引言
在微服务架构中,谈到SLA保证,我们更多是从宏观的角度来需求解决方案。比如,通过合理服务拆分来增加系统整体的可维护性;通过多实例部署来保证系统的灾备。但是单个服务是可靠性、性能其实也是保证系统SLA的重要一环。
本文将介绍提升单体服务SLA的一些设计原则/方法
1. 开关可控
开关可控是指通过在系统中加入一些控制开关,以便在运行时或配置时对某些功能进行开启或关闭,从而满足不同的业务需求。它实现了让系统的部分部分功能"可插拔"的效果,方便业务人员快速调整系统功能。
开关可控通常应用于以下场景:
- 定制化需求处理:某一个定制化需要,可以通过在系统中加入一个开关进行开启或关闭,方便快速处理定制化需求并减少业务人员的开发成本。
- 测试平稳迭代:通过开关独立控制系统的某个功能,将其独立于其他阶段进行功能测试和性能监控,这样就可以高效地完成系统的迭代和测试,同时降低了对整个系统的影响。
- 功能开发:通过对功能进行开关控制,可以逐步向用户推导新功能和服务,以紧密配合用户的需求,同时避免过度或不必要地浪费预算和时间。
2. 故障隔离
微服务架构下的单个服务设计而言,故障隔离是指当服务的内部某些逻辑异常、或者外部依赖项发生故障时,服务能够将其隔离,使用替代服务,或者提供柔性服务。
在具体的实现过程中,编码时需要加入对各种错误和异常情况的处理逻辑。例如,当程序出现空指针引用、参数错误、数组越界等情况时,应该抛出相应的异常或记录错误信息,防止程序崩溃,对整个系统造成影响。
3. 必要缓存
现在系统,尤其是对性能有要求的系统,使用缓存可以提高系统的性能和可扩展性,是不可或缺的一部分。
缓存给系统带来的好处至少包含以下几方面:
- 提升响应速度: 缓存可以在不重新生成结果的情况下,直接返回已经计算出来的结果。这可以减少前端或后端服务的负载,提高系统性能和响应速度。
- 减少冗余计算: 当相同的计算或数据需要多次访问时,可以使用缓存来避免多次冗余计算。这可以减少CPU和I / O使用,并提高服务的响应速度。
- 提高可扩展性: 通过使用缓存,可以将计算和数据缓存到多个服务器上,这可以有效减轻单个服务器的负载,并使系统能够更好地扩展和容错。
4. 接口无状态
接口无状态(Stateless)是指在HTTP或其他协议通信中的请求、响应过程中,服务器不保存客户端请求的任何状态信息。接口无状态是保证系统SLA的基本要求。
当接口有状态时,就必须在服务器端维护状态信息。如果客户端在多个服务器之间切换,那么维护这些状态信息将会变得非常困难。而接口无状态允许服务器更方便地扩展,因为它可以在请求处理完毕后立即释放状态信息,从而在更多的服务器上分配负载并更易于水平扩展。
5. 单一职责
- 在微服务架构中,一个微服务的职责是单一的
- 在单个服务中,各个模块的职责是单一的。
在单个服务的设计中,服务中的每个模块负责不同的任务,从而使得系统更加容易维护、扩展和测试。
6. 异常监控
异常监控是指对单体服务运行过程中系统出现异常情况的监控、记录和及时响应的机制。
异常监控的具体实现可以采用以下几种方式:
- 设计良好的监控机制:需要在服务中添加针对各种异常情况的监控机制,以便能够及时发现和记录异常情况。例如,通过添加合适的日志记录功能、性能指标监测和警报机制、信号处理和控制反馈机制等。
- 应用异常监控工具:可以使用大量的开源或商用工具来监控单体服务,如Zabbix和Grafana等。这些工具可以帮助监控各种异常情况,并快速对异常进行反馈和处理。
- 应用自动化工具:可以使用自动化工具,如Puppet、Chef、Ansible等,来自动监控服务和异常情况,快速响应服务出现的问题,提升安全性和可靠性。