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
目录
相关文章
|
2月前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
304 6
|
2月前
|
人工智能 监控 安全
java基于微服务架构的智慧工地监管平台源码带APP
劳务管理: 工种管理、分包商管理、信息采集、班组管理、花名册、零工采集、 现场统计、考勤管理、考勤明细、工资管理、零工签证
286 4
|
1天前
|
负载均衡 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开发者的关键技能。
|
19天前
|
存储 安全 Java
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
28 1
|
19天前
|
Java API Apache
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)
43 0
|
1月前
|
传感器 人工智能 监控
智慧工地云信息平台源码(微服务+java+springcloud+uniapp+mysql)
智慧工地云信息平台源码(微服务+java+springcloud+uniapp+mysql)
30 0
|
1月前
|
设计模式 缓存 Java
Java新时代:微服务架构下的性能优化实践
【2月更文挑战第12天】 在当今快速发展的软件工程领域,微服务架构因其灵活性和可扩展性而成为主流。随着应用程序变得日益复杂,性能优化成为了开发者不可回避的挑战。本文将探讨在Java环境下,利用微服务架构进行性能优化的策略和实践。我们将从微服务的基本概念出发,深入分析如何通过设计模式、数据库优化、缓存机制以及并发处理等手段,有效提升Java应用的性能。此外,本文还将分享一些实际案例,以帮助读者更好地理解和应用这些优化技术。
|
2月前
|
安全 前端开发 JavaScript
JAVA原生交易所系统开发正式版丨原生交易所系统开发指南教程/源码项目
确定项目需求:明确交易所系统的功能需求,包括支持的交易对、交易类型、用户操作流程、安全性需求等。
|
2月前
|
存储 Java Docker
深入浅出:使用Docker容器化改进Java微服务架构
在快速演进的软件开发领域,微服务架构已成为构建可扩展、灵活且独立部署的应用程序的首选模式。然而,随着服务数量的增加,管理与部署这些服务的复杂性也随之上升。本文将探讨如何利用Docker容器技术,简化并优化Java微服务架构的开发、部署和运维流程。通过具体实例,我们将展示容器化如何为微服务架构带来的高效性、一致性和可伸缩性,从而使开发团队能够更加专注于业务逻辑的实现,而非环境的搭建与维护。
19 1
|
9天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
17 0