微服务并不是新事物,因为很早之前就有很多应用程序这样设计并实现了。微服务实际上仅仅是一个新的术语,它描述了一种拥有某些特征并且遵循某些原则的软件系统的架构风格。微服务甚至被称为轻量级或细粒度的 SOA。 Russ Miles 在介绍使用 Java 平台设计与构建抗脆弱的微服务时将微服务定义为单一目的的服务,它只做一件事,并且粒度划分良好,支持系统的演化以及你认为在运行期与设计期重要的东西。
那么我们应该怎样设计微服务才能让它抗脆弱进而支持系统的演化呢?来自于 Red Hat 的软件工程师 Bilgin Ibryam 最近发表了一篇博客,他认为创建微服务时最常见的实践包括以下几个方面:
- 体积小。微服务最基础的原则就是每一个应用程序都比较小,它只做一件事情并且要把它做好。
- 拥有事务边界。明确定义消息属于哪里是非常重要的,哪怕整个系统的状态并不确定。
- 自监控。微服务应该对外暴露它本身以及它所依赖的各种资源的状态的信息。用户能够通过 JMX 等方式获取统计数据,例如处理消息的平均、最短和最长时间,成功的和失败的消息数,内存的使用情况等。
- 容错性。每一个微服务都能失败或者无响应一段时间,但是这并不会导致整个系统崩溃。微服务应该具有容错性并且能够恢复。
- 高度可配置。通过配置拥有不同的自由度。
- 支持智能终端。 微服务喜欢 RESTish 协议和轻量级的消息而不是 Web 服务。
- 可测试。消息流的测试和业务 POJO 的测试相互隔离。
- 单独配置。 微服务最重要的特性就是每个服务都是独立运行的,最常见的形式就是作为单独的 Java 应用程序。
- 语言中性。小而独立部署的应用程序让开发人员能够为指定的任务选择最合适的语言。
如果你想了解更详细的信息,可以查看 Bilgin Ibryam 的博文。如果你也拥有一些使用微服务的心得并且想和大家分享,那么就联系我们吧。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论