从微服务到分布式系统-Java开发人员生存指南

感觉像是对微服务的炒作正在慢慢地落到实处,并且我们的行业开始意识到,仅通过在现有组件之上公开一些HTTP接口就无法轻松创建根据微服务背后的体系结构范式的系统。 我们似乎确实同意必须进行服务优化的基础架构,文化和组织变革,最后但并非最不重要的是这些架构的外部架构或业务流程。 许多Java开发人员似乎仍在苦苦挣扎的部分是具体的系统体系结构,以及事实上,微服务就是分布式系统。 不幸的是,正是这些知识领域决定了项目失败的成功。 对于一些背景知识,我建议您阅读

丹尼尔·布莱恩特(Daniel Bryant) 对Uwe和Adrian进行的InfoQ精彩采访 。

为什么要再次使用微服务? 我不能只是高兴地编写EJB和Servlet吗?

微服务的关键思想是支持其余应用程序环境的独立性和快速可扩展性的属性。 此外,与基于应用程序服务器的应用程序相比,它们应独立扩展并需要更少的资源。 在不断变化的业务需求和不断增长的应用程序客户端数量的世界中,集中式基础架构的运营成本日益高昂,并朝着无法预测的负载或负载高峰扩展。 如果所有人都被应用服务器所困扰,那么就不会有Netflix,Twitter或Amazon。 所以:不。您不能只呆在原地。

微服务是分布式系统。 他们有什么特别之处?

分布式系统的原始定义是:“分布式系统是一种模型,其中位于联网计算机上的组件通过传递消息来通信和协调其动作。” ( Wikipedia )这正是基于微服务的架构中发生的事情。 各个服务被部署到物理上在某个地方运行的云实例,并且它们交换消息。 这与我们用来构建集中式应用程序的方式有很大的不同。 现在,我们不再拥有代表我们处理各种同步,事务和故障转移场景的服务器,而是拥有独立发展且彼此不捆绑的独立服务。 分布式计算存在一些独特的基本挑战。 其中包括容错,同步,自我修复,背压,网络分裂等。

分布式系统不是每个人都称为反应式系统吗?

比这更复杂。 老实说,这些天“反应性”这个词本身有很多事情。 要使用单个微服务构建应用程序或系统,您需要使用一组设计原则,使它们具有响应性,弹性,弹性和消息驱动性。 如果听起来很熟悉,那么您可能是对的。 来自的定义
反应式宣言 。 实现反应式宣言的四个特征的分布式系统应该被称为
反应系统 。 您可以在Jonas的书中阅读有关反应式微服务系统设计原理的更多信息。 Lagom框架是基于这些原则构建的,但是让我清楚一点,您不一定需要特定的框架或产品来构建此类应用程序。 其中一些只是使您的地狱生产率更高,并且您的运营会更有效。 休·麦基(Hugh McKee)有一本关于基于Actor的系统的设计原理的免费书籍 。

构建基于微服务的系统有哪些选择?

我个人看到解决今天与微服务有关的问题的两种不同趋势。 首先是将问题归结为业务流程或数据中心操作或云系统,如DC / OS,OpenShift,Cloudfoundry等。 第二种解决方案是在应用程序或框架级别上本机处理它们(Akka,Vert.x等)。

每次服务一个容器,或者为什么水蟒 不应该 吞下马匹。

让我们更详细地介绍第一种方法。 编写微服务,将其与运行时一起打包在一个小容器中,然后将其推送到云中。 如今,DevOps开发人员已经全堆了,因此创建基于云的运行时所需的元信息很容易。 多亏了我的引导性服务,所有相关的监视信息已经公开,并且我可以轻松地检测到失败的服务并重新启动它们。 这肯定可以工作。 您甚至可以将功能齐全的应用程序服务器用作微服务运行时。 此外,还有许多魔术框架(NetflixOSS)可帮助应对分布式系统的挑战。 对我个人而言,缺点是在这种情况下与基础架构紧密耦合。 您所选择的平台之外的系统将无法在其他任何平台上运行。 此外,他们建议您只需要使用容器来解决微服务领域中的所有问题。 回顾响应式宣言,这些类型的系统将无法帮助您满足在服务之间使用消息传递的要求。

没有容器的微服务? 那就是没有黄油的花生!

真正。 容器可以很好地完成一件事。 将整个堆栈以可控制的方式打包到可部署的单元中。 它们是基础架构级别的隔离机制。 拥有容器标准实际上可能是一件好事。 因此,请保留您的容器。 但是,您还需要更多。
因此,构建具有复原力的自我修复系统的关键是允许对故障进行以下处理:将故障包含在内,将其分类为消息,发送给其他组件(充当主管)并从发生故障的组件外部的安全上下文中进行管理。 在这里,以消息为驱动力是推动力:摆脱每个人都受到痛苦或忽略的强耦合,易碎,深度嵌套的同步呼叫链。 这个想法是将故障管理与呼叫链分离,使客户端从处理服务器故障的责任中解放出来。 没有容器或业务流程编制工具可以帮助您将其集成。 您正在寻找事件源。 的
使用事件源的事件驱动架构的设计概念与微服务架构模式非常一致。

响应式编程,系统和流:不是全部一样吗?

反应性已经成为一个超负荷的术语,并且现在正与与不同人相关的几项不同的事物相关联—在好的公司中,诸如“流”,“轻量”和“实时”之类的词。 “响应式编程通过性能和资源效率,在组件级别上为内部逻辑和数据流管理提高了开发人员的生产率。 Reactive Systems在系统级别上通过弹性和弹性为架构师和DevOps提供生产力,用于构建Cloud Native或其他大规模分布式系统。 您应该真正花时间阅读一下JonasBonér和Viktor Klang如何解释他们之间的个体差异 。

在哪里可以了解有关如何设计反应式微服务的更多信息?

詹姆斯·罗珀(James Roper)在去年的反应性峰会上做了精彩的演讲,并亲手研究了系统的体系结构(包括数据流,所用的通信类型以及将系统分解为组件的方式)如何需要在将整体分解为基于反应式微服务的系统时进行更改。

我在CJUG上进行了有关Java开发人员的CQRS的演讲 ,向您进行了介绍。 如果您有感兴趣的特定主题,请在评论中让我知道。

为您提供更多阅读

  • JonasBonér和Viktor Klang 在20分钟内介绍了反应式编程与反应式系统
  • Konrad最近进行了一次网络研讨会,内容涉及Java 8中的Akka Streams,Alpakka和Kafka中的Reactive Integrations。
  • 传统Java企业的反应式系统设计基础
  • Duncan DeVore 在不到12分钟的时间内进行了反应式架构,设计和编程

翻译自: https://www.javacodegeeks.com/2017/02/microservices-distributed-systems-survival-guide-java-developers.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

timespan怎么比较大小_钻石吊坠回收怎么选择大小?

钻石吊坠也是比较常见的钻饰,和钻戒不同的是,钻石吊坠并不是必须要买的珠宝,但作为点缀全身的装饰,钻石吊坠的大小问题也让大家很是关注,钻石吊坠回收怎么选择大小?一般我们会把钻石从10分算起(10分以下的钻…

图像边缘算子

(1)常见边缘检测算子:Roberts 、Sobel 、Prewitt、Laplacian、Log/Marr、Canny、Kirsch、Nevitia (2) 其中一阶边缘算子:Roberts 、Sobel 、Prewitt、Kirsch。 其中二阶边缘算子:Laplacian、Log…

python使用telnet远程连接linux系统读取信息_Linux服务笔记之一:Telnet 远程登录

最近,在学习Linux服务器中的搭建,感觉上非常强大。下面,我写下在Linux下搭建Telnet服务来远程管理设备--这也是一种古老的远程管理方 式这一。其中,Telnet服务也是基于C/S模式的。客户端用Telnet远程登录协…

团队作业(五):冲刺总结

团队作业(五):冲刺总结 转载于:https://www.cnblogs.com/20175226wpy/p/10964911.html

matlab 判断对象的数据类型isa()

K isa(obj, class_name) 判断obj是否为class_name类型。如果是,返回逻辑1(真);如果不是,返回逻辑0(假)。 参量obj是一个MATLAB对象或者Java对象。参量class_name是MATLAB(预定义的…

使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构

“ Lambda体系结构是一种数据处理体系结构,旨在通过利用批处理和流处理方法来处理大量数据。 这种体系结构方法试图通过使用批处理提供批处理数据的全面而准确的视图,同时使用实时流处理提供在线数据的视图来平衡延迟 , 吞吐量和容错能力 。 …

matlab regionprops区域属性信息

stats regionprops(L,properties) 返回的stats为一个结构体struct 测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。…

python3虚拟环境使用教程_python虚拟环境完美部署教程

一、前言预处理建议仔细看完本文章之后在进行操作,避免失误,本环境可以用于生产环境,有利于生产环境python之间的环境隔离,互相不会产生环境冲突;pyenv和pyenv-virtualenv可以完美结合使用,具体使用情况看项…

yandexbot ip列表整理做俄罗斯市场的站长可以关注一下

这段时间ytkah在负责一个客户的网站,主要做俄罗斯市场,当然是要研究Yandex了,首先是要知道yandexbot的ip有哪些,本文通过分析这个站从2018.12.02到2019.05.21这段时间产生的网站log日志得出的结果,log日志文件1.3G&…

为什么闲鱼不能搜索python_Python 分析后告诉你闲鱼上哪些商品抢手?

前言文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:【Airpython】PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun准 备 工 作在编写代码…

matlab imfill孔洞填充

BW2 imfill(BW) 作用填充二值图像BW中的空洞 clear all; clc; close all; img imread(test1.png); if ndims(img)3 img rgb2gray(img); end img_bw im2bw(img); img_fill imfill(img_bw, holes); figure; subplot(1,2,1),imshow(img_bw), title(有空洞的图像); s…

将Gatling集成到Gradle构建中–了解SourceSet和配置

我最近在一个项目中工作,我们不得不将出色的负载测试工具Gatling集成到基于Gradle的版本中。 有可用的gradle插件使此操作变得容易,其中两个是this和this ,但是对于大多数需求而言,只需简单执行命令行工具本身就足够了&#xff0c…

matlab bwlabel标记连通区域

[L,num] bwlabel(BW,n) 这里num返回的就是BW中连通区域的个数。返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域…

mysql遇到时区问题的坑(Java解决方案)

最近项目遇到一个坑&#xff0c;就是server和db之间存在时区问题&#xff0c;本人的db是utc时间&#xff0c; 可以使用代码设置时区来解决&#xff0c;本人这里使用joda三方包&#xff0c;joda蛮好用的&#xff0c;具体用法这里不做详细描述。 先引入pom <dependency><…

vba 不等于_EXCEL表格VBA中的运算符

就像函数公式里面需要运算符一样&#xff0c;VBA中同样也需要运算符&#xff0c;今天我们就来了解下VBA中的运算符是怎么表达的。在学习运算符前&#xff0c;我们先来学习一段简单的VBA代码&#xff0c;Msgbox的表达。在代码窗口中输入&#xff1a;sub test ()tset表示测试的意…

C++常用的容器(vector、set、list、map)

C STL中最基本以及最常用的类或容器无非就是以下几个&#xff1a; stringvectorsetlistmap 下面就依次介绍它们&#xff0c;并给出一些最常见的最实用的使用方法&#xff0c;做到快速入门。 string 首先看看我们C语言一般怎么使用字符串的 char* s1 "Hello SYSU!&quo…

阿里 前端 规范_技术方案多、复用难?且看阿里文娱的前端工程管理实践

近两年&#xff0c;前端复杂度持续攀升&#xff0c;从框架到开发模式都衍生出了无数的技术方案。单点的小规模尝试&#xff0c;导致团队内部技术栈以及实现方案出现分化&#xff0c;间接造成了知识库之间的隔离、项目之间模块复用率下降&#xff0c;人员在不同项目中的学习成本…

Codeforces 671C Ultimate Weirdness of an Array 线段树 (看题解)

Ultimate Weirdness of an Array 写不出来&#xff0c; 日常好菜啊。。 考虑枚举GCD&#xff0c; 算出一共有多少个对 f(l, r) < GCD&#xff0c; 我们用fuc[ i ] 表示的是在 l i 这个位置开始, 最小的合法的 R&#xff0c; 可以发现这个函数随 i 单调不下降&#xff0c; …

安卓开发环境_我的安卓开发环境

大家好&#xff0c;今天想跟大家分享一下我的安卓开发环境&#xff0c;分别是硬件环境和软件环境。那么在开始之前先交代下我的背景&#xff0c;我从事安卓开发1年8个月&#xff0c;安卓教学9个月&#xff0c;大项目1个&#xff0c;小项目100。先说说硬件环境吧&#xff0c;直接…

构造函数,拷贝构造函数,赋值函数

C中一般创建对象&#xff0c;拷贝或赋值的方式有构造函数&#xff0c;拷贝构造函数&#xff0c;赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数&#xff0c;是当创建一个类的对象时&#xff0c;它被调用来…