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

本文涉及的产品
服务治理 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应用容器、多线程编程以及分布式系统感兴趣,深知“路漫漫其修远兮,吾将上下而求索”,希望能够和大家多多交流共同进步。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
13小时前
|
缓存 NoSQL Java
构建高性能微服务架构:Java后端的实践之路
【5月更文挑战第5天】在当今快速迭代和高并发需求的软件开发领域,微服务架构因其灵活性、可扩展性而受到青睐。本文将深入探讨如何在Java后端环境中构建一个高性能的微服务系统,涵盖关键的设计原则、常用的框架选择以及性能优化技巧。我们将重点讨论如何通过合理的服务划分、高效的数据存储策略、智能的缓存机制以及有效的负载均衡技术来提升整体系统的响应速度和处理能力。
|
6天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
13天前
|
安全 Java 数据安全/隐私保护
|
17天前
|
监控 Java API
Java微服务架构设计与实现
【4月更文挑战第18天】本文探讨了如何使用Java设计和实现微服务架构,强调了微服务的自治性、分布式治理、弹性设计和可观测性等关键特性。在设计时,需考虑服务边界、通信机制、数据库、松耦合和高内聚、安全策略以及容错设计。Java生态系统中的Spring Boot、Spring Cloud、JHipster、Quarkus和Micronaut等框架提供了支持。最佳实践包括CI/CD、API版本控制、服务监控、日志记录和文档契约测试。通过持续学习和实践,可构建灵活可靠的微服务系统,满足业务需求并提升软件质量。
|
17天前
|
人工智能 监控 安全
Java+Spring Cloud +Vue+UniApp微服务智慧工地云平台源码
视频监控系统、人员实名制与分账制管理系统、车辆管理系统、环境监测系统、大型设备监测(龙门吊、塔吊、升降机、卸料平台等)、用电监测系统、基坑监测系统、AI算法分析(安全帽佩戴、火焰识别、周界报警、人员聚众报警、升降机超载报警)、安全培训、设备监测。
21 4
|
18天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
20天前
|
Java API 微服务
Java微服务架构:原理与实践
【4月更文挑战第15天】本文介绍了Java微服务架构的原理和实践,包括服务拆分、注册与发现、API网关、配置中心和分布式链路追踪。重点提及Spring Boot和Spring Cloud作为开发工具,以及Docker和Kubernetes用于容器化和集群管理。Java微服务架构旨在应对大规模、复杂业务系统的挑战,提升系统可用性和可扩展性。
|
10小时前
|
监控 负载均衡 持续交付
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第5天】在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业追求的技术典范。本文深入探讨了微服务的核心组件、设计原则和实施策略,旨在为后端开发者提供构建和维护高效微服务系统的实用指南。通过分析微服务的最佳实践和常见陷阱,我们揭示了如何优化系统性能、保证服务的高可用性以及如何处理分布式系统中的复杂性。
|
15小时前
|
监控 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第5天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选模式。本文将探讨如何通过一系列经过验证的策略和最佳实践来构建一个高效且可靠的微服务系统。我们将深入分析微服务设计的核心原则,包括服务的细粒度划分、通信机制、数据一致性以及容错处理,并讨论如何利用现代技术栈来实现这些目标。文章将提供一套综合指南,旨在帮助开发者和架构师在保证系统性能的同时,确保系统的稳健性。
11 4
|
15小时前
|
负载均衡 Java 数据库
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第5天】在现代软件开发中,微服务架构已经成为一种流行的设计模式。它通过将大型应用程序分解为一组小型、松散耦合的服务来提高可维护性、可扩展性和敏捷性。本文将探讨如何构建高效的微服务架构,包括选择合适的技术栈、设计良好的服务接口、确保数据一致性以及实现高可用性和负载均衡。