Java微服务开发指南 -- 下一步该了解什么?

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 下一步该了解什么?     我们在这本小册子里面介绍了非常多的知识,但是它远远不够涵盖一切!我们需要知道,这只是冰山一角,有非常多的微服务所涉及到的领域在本书中没有探讨。在最后这个章节,我们将会简要的介绍一些你必须了解的概念,并将这些联系留给读者进行深入研究。

下一步该了解什么?

    我们在这本小册子里面介绍了非常多的知识,但是它远远不够涵盖一切!我们需要知道,这只是冰山一角,有非常多的微服务所涉及到的领域在本书中没有探讨。在最后这个章节,我们将会简要的介绍一些你必须了解的概念,并将这些联系留给读者进行深入研究。

配置

    配置(Configuration)是分布式系统中非常重要的部分,而在微服务架构中变得愈发重要和困难。我们需要在配置和不可变递交(Immutable delivery)之间寻求平衡,因为我们不希望出现服务的碎片化。例如:我们需要能够改变日志级别,在A/B测试上切换特性,配置数据库连接或者使用秘钥或者密码,我们回顾之前介绍的三个Java微服务框架,但是每个框架的配置方式略微不同,那么在非Java环境下的微服务配置方式又会变成什么样子呢?

如果以配置的形式存在,不同的需求就会在一样的代码基础上,生成不同的镜像,这就是碎片化的开始

    为了能够在容器中,技术无关的进行配置管理,我们需要采用技术无关的方式在容器中进行配置。在Docker环境中,我们能够通过注入环境变量的方式来进行配置,Kubernetes更是推荐我们这样进行配置。Kubernetes也提供了相应的APIs,将Secrets注入到容器中,而在Secrets中可以放置用户名、密码以及私有秘钥等诸多配置内容。Kubernetes在最近也添加了ConfigMaps(类似Secrets),它被用来完成应用级别的配置,在解耦Docker镜像中的配置同时,它可以支持通过环境变量或者文件的方式注入配置。如果一个应用能够以配置文件或者环境变量的方式消费配置,那就可以使用Kubernetes来完成配置而不需要引入复杂的配置服务和客户端。在Kubernetes下对微服务的配置,可以做到技术无关,而配置也被作为集群管理的基础设施。

在kubernetes中,secret对象类型主要目的是 保存一些私密数据,比如密码,OAuth tokens,ssh keys等信息。将这些信息放在secret对象中 比 直接放在pod或docker image中更安全,也更方便使用

Kubernetes中的ConfigMaps

日志,Metrics和跟踪

    不可置疑,微服务架构也会带来诸多缺点,尤其是对日志、Metrics和跟踪带来的影响很大,随着系统被拆分成为一个个独立的部分,就需要更多的工具投入来支持你看到全局。当你以可伸缩的方式运行服务,特别是在每个组件都有可能失败的情况下,我们需要收集服务的信息以及服务相关的数据(类似Metrics和跟踪信息)而不用理会容器是否存活。接下来,介绍一些途径和方法当你考虑设计日志,Metrics和跟踪策略相关的功能:

  • 开发人员暴露他们的日志
  • 聚合/中心化
  • 搜索与相关性
  • 可视化以及图表

    Kubernetes通过插件的方式,允许添加集群级别的日志和Metrics收集功能。典型的解决方案包括,syslogFluentd或者Logstash,它们可以将日志从服务中拖走,以流的形式投机到中心化的聚合器中。有些人会使用消息中间件的形式来解决日志收集,目的是提升可用性,这也可以理解。ElasticSearch是一个非常好的聚合日志方案,它支持伸缩以及索引,并且你可以在前端架设Kibana,它能提供良好的仪表盘展示和搜索界面。除此之外,还有一些PrometheusZipkinGrafanaHawkularNetflix Servo方案供选择。

事实上ELK作为实际方案已经运作很长时间了,它们分别是ElasticSearchLogstashKibana

持续递交(Continuous Delivery)

    在第五章中讨论过不可变递交,它对于微服务而言是至关重要的,当我们拥有了大量小的服务后,我们现有的手工流程就无法支撑微服务的构建,换句话说,当每个团队都能够运维自己的服务时,我们就需要一个统一的方式来避免出现运维瓶颈以及人肉错误。一旦我们采用了微服务架构,我们需要洞悉并了解服务的反馈,只有这样才能帮助我们走的更远。当业务需求改变了,我们通过迭代开发,将需求在系统中进行了实现,我们就会不断的分步发布系统,事实上,我们需要一套可以运行的软件交付流程。这个流程是由许多子流程组成的,它们通过交汇点等特定节点连接而成,理想中,我们希望能够自动的完成构建、测试以及部署。

    就像Docker和Kubernetes,提供给开发者内置的工具,使之能够做到滚动升级、蓝绿发布或者canary releases的部署策略。显然这些工具并不是专门用来做这些工作的(比如:Amazon或者Netflix在Linux容器之前就已经广泛使用这项技术),但是容器能够使我们更加容易的做到。你能够使用持续集成工具,例如:Jenkins以及Jenkins流程,用它以及Kubernetes来连接你的构建和部署流程。可以通过了解fabric8OpenShift项目来学习如何将Kubernetes与Jenkins流程集成起来。

总结

    本书是一个以实践为主导,使用流行的Java为服务框架来一步一步构建分布式系统的教程。微服务不是本书讨论的唯一技术解决方案,人也是复杂系统中的重要组成部分,需要使人时刻保持伸缩以及敏捷,在系统发展的同时,也要考虑组织结构的调整。

    在介绍了使用Java框架来构建微服务后,我们需要构建、部署和管理它们。使用现有的技术来进行微服务的伸缩性维护非常困难,因此我们使用类似Docker和Kubernetes来帮助我们进行构建和部署,并使用类似不可变递交的最佳实践。

    当我们开始通过Docker和Kubernetes来构建、部署微服务,我们可以使用本地环境来完成这些工作,为此我们使用了RedHat Container Development Kit以及运行在上面的RedHat OpenShift来完成部署工作。

译者将其改造为Kubernetes的本地版,minikube

    最后我们接触了一点重要的基本概念,例如:配置、日志、Metrics和持续递交,但是我们没有触及注入:安全、自服务等其他数不清的话题,但是并不代表着它们不属于微服务的范畴。

    我们希望这本书对你有用。

关于作者

     Christian Posta 是RedHat的架构师和中间件专家,他是一名作家、博主和演讲家。他作为Apache ActiveMQApache CamelFabric8以及相当多项目的committer。他花费了大量的时间再可伸缩web应用以及帮助企业创建大规模分布式系统,而这些在现在被称作微服务。他热爱分享和指导,并指导团队通过分布式原理、微服务、devops以及cloud-native来获得项目的成功。闲暇时刻,他会和他的妻子Jackie以及两个女儿Madelyn和Claire来渡过美好时光。

关于译者

     魏鹏,阿里巴巴集团技术专家。2009年硕士研究生毕业加入阿里巴巴中国网站技术部,曾担任中国网站交易平台架构师,主导了交易系统服务化工作,设计实现的数据迁移系统高效的完成了阿里巴巴中国网站交易数据到阿里巴巴集团的迁移工作。目前在阿里巴巴中间件技术部的应用容器与服务框架组从事Java应用容器Pandora和服务框架HSF的相关工作,其中Java应用容器Pandora是阿里巴巴中间件运行的基础,而服务框架HSF则是阿里巴巴集团实现服务化的主要解决方案,二者在阿里巴巴拥有最为广泛的使用量。个人平时喜欢阅读技术书籍,与同事合著了《Java并发编程的艺术》一书,并翻译一些国外优秀文档,爱总结,喜分享,对Java应用容器、多线程编程以及分布式系统感兴趣,深知“路漫漫其修远兮,吾将上下而求索”,希望能够和大家多多交流共同进步。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1天前
|
消息中间件 负载均衡 Java
Java微服务通讯方式有哪些?
【8月更文挑战第18天】Java微服务通讯方式有哪些?
11 1
|
2天前
|
消息中间件 Java API
解密微服务架构:如何在Java中实现高效的服务通信
微服务架构作为一种现代软件开发模式,通过将应用拆分成多个独立的服务,提升了系统的灵活性和扩展性。然而,实现微服务之间的高效通信仍然是许多开发者面临的挑战。本文将探讨在Java环境中实现微服务架构时,如何使用不同的通信机制来优化服务之间的交互,包括同步和异步通信的方法,以及相关的最佳实践。
|
17天前
|
NoSQL Java Redis
Spring Boot集成Redis全攻略:高效数据存取,打造性能飞跃的Java微服务应用!
【8月更文挑战第3天】Spring Boot是备受欢迎的微服务框架,以其快速开发与轻量特性著称。结合高性能键值数据库Redis,可显著增强应用性能。集成步骤包括:添加`spring-boot-starter-data-redis`依赖,配置Redis服务器参数,注入`RedisTemplate`或`StringRedisTemplate`进行数据操作。这种集成方案适用于缓存、高并发等场景,有效提升数据处理效率。
72 2
|
1月前
|
消息中间件 NoSQL Java
使用Java构建可扩展的微服务架构
使用Java构建可扩展的微服务架构
|
1月前
|
监控 Java API
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
48 0
|
1月前
|
消息中间件 监控 Java
在Java应用中实现微服务间的消息队列通信
在Java应用中实现微服务间的消息队列通信
|
1月前
|
消息中间件 存储 SpringCloudAlibaba
会员系统01----基于Java开发的 | BTC,完整的SpringClound微服务包含内容
会员系统01----基于Java开发的货币交易所 | BTC,完整的SpringClound微服务包含内容
|
1月前
|
负载均衡 监控 Java
Java中的可扩展微服务架构
Java中的可扩展微服务架构
|
2月前
|
消息中间件 NoSQL Java
使用Java构建可扩展的微服务架构
使用Java构建可扩展的微服务架构
|
1月前
|
监控 Java 持续交付
使用Java构建企业级微服务架构的策略与挑战
使用Java构建企业级微服务架构的策略与挑战