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

java分布式系统开发

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

为您提供更多阅读

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

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

java分布式系统开发

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

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

相关文章

链表数据结构原理图/内存结构图/内存图

单项链表内存结构图(也叫原理图) 单项链表内存结构图

反射与泛型 java_Java的反射 和 泛型的一个问题

aluckdog模板方法在编译过程中类型擦除:update(T,UpdateOperations)退化成update(Object,UpdateOperations);update(Query,UpdateOperations)退化成update(Query,UpdateOperations);morphia的update方法不光是一个模板方法,还是一…

迭代器原理图

原理图&#xff1a; Iterator<String> it Collection.iterator();it 是集合Collection的视图&#xff0c;迭代器其实就是视图&#xff08;类似数据库的 view&#xff09;&#xff0c;可以理解为一张单列多行的表&#xff0c;如下图所示&#xff1a; 有人理解成单行多…

neo4j python 算法_图论与图学习(二):图算法

选自towardsdatascience作者&#xff1a;Mal Fabien机器之心编译参与&#xff1a;熊猫图(graph)近来正逐渐变成机器学习的一大核心领域&#xff0c;比如你可以通过预测潜在的连接来理解社交网络的结构、检测欺诈、理解汽车租赁服务的消费者行为或进行实时推荐。近日&#xff0c…

cobol和java_现代化历险:策略+将COBOL转换为Java的示例

cobol和java在Keyhole Software&#xff0c;我们在很大程度上是一家现代化公司。 我们有一些顾问&#xff0c;专门研究将旧的代码迁移到新的&#xff0c;翻新的残旧代码库&#xff0c;并为大多数已经被供应商锁定的企业设计更光明的未来。 作为这些经验的一个有趣的副作用&…

递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径

什么是算法&#xff1f;有一个很著名的公式 “程序数据结构算法”。曾经跟朋友吃饭的时候我问他什么是算法&#xff0c;他说算法嘛&#xff0c;就是一套方法&#xff0c;需要的时候拿过来&#xff0c;套用就可以&#xff0c;我吐槽他&#xff0c;他说的是小学数学题的算法&…

envoy重试_具有Envoy代理的微服务模式,第二部分:超时和重试

envoy重试该博客是系列文章的一部分&#xff0c;该系列文章更深入地介绍了Envoy Proxy和Istio.io &#xff0c;以及它如何实现一种更优雅的连接和管理微服务的方式。 跟随我christianposta &#xff0c;紧跟这些博客文章的发布。 什么是Envoy代理 &#xff0c;它如何工作&…

网络研讨室_即将举行的网络研讨会:调试生产中Java的5种最佳实践

网络研讨室您的团队是否花费超过10&#xff05;的时间在生产中调试Java&#xff1f; 将新代码部署到生产中是一项艰巨的任务。 在您的本地环境中起作用的东西在生产中的作用并不相同&#xff0c;您可以通过用户来了解。 不理想吧&#xff1f; 生产中的调试是一个关键要素&…

chrome gwt1.7_快速提示:使用Chrome开发工具调试GWT应用程序

chrome gwt1.7调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前&#xff0c;经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点&#xff0c;并使用调试模式来跟踪错误和错误。 现在&#xff0c;在超级开发模式下&…

Servlet 运行原理

文章目录Servlet 如何运行演示 Servlet 运行原理Servlet 如何运行 用户向浏览器地址栏输入&#xff1a;http://ip:port/helloweb/sayHello?namezs 浏览器使用 ip:port(端口号)连接服务器 浏览器将请求数据按照 http 协议打成一个数据包(请求数据包)发送给服务器 请求数据包…

java github_GitHub Research:超过50%的Java记录语句写错了

java github为什么生产日志无法帮助您找到错误的真正根本原因&#xff1f; 询问您是否使用日志文件监视您的应用程序几乎就像询问…您是否喝水。 我们都使用日志&#xff0c;但是我们如何使用它们则是一个完全不同的问题。 在下面的文章中&#xff0c;我们将对日志进行更深入…

yolov5论文_YOLOv5的妙用:学习手语,帮助听力障碍群体

编辑&#xff1a;魔王、杜伟计算机视觉可以学习美式手语&#xff0c;进而帮助听力障碍群体吗&#xff1f;数据科学家 David Lee 用一个项目给出了答案。如果听不到了&#xff0c;你会怎么办&#xff1f;如果只能用手语交流呢&#xff1f;当对方无法理解你时&#xff0c;即使像订…

python制作系统程序与html交互_python+html语音人物交互_flask后台与前端(html)交互的两种方法...

基于python flask框架搭建webflask后台与前端(html)交互的两种方法&#xff1a;方法1 使用flask-wtf 提供的表单用常见的登录为例&#xff1a;// An highlighted blockfrom flask_wtf import Formclass LoginForm(Form): # 登录表单ROLE SelectField(角色, choices[(s, 管理员…

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

Student s new Student(); s.play(); Student s2 new Student();以上代码的执行流程如下&#xff1a; JVM 作为操作系统的一个迚程在系统中执行&#xff0c;那么系统会为 JVM 分配一块内存空间&#xff0c;这块内存空 间被 JVM 分为 3 大块(栈区、堆区、方法区) 一般而言&a…

虚拟内存越大越好吗_手机的运行内存真的是越大越好吗?6GB和8GB到底又该如何选择?...

许多人买手机&#xff0c;除了看处理器、外观以外&#xff0c;关注最多的莫过于手机的运行内存了。选择一个合适的运行内存几乎关系到整个手机使用寿命和命脉。那么我们现在买手机选择多大的运行内存合适呢&#xff1f;真的是越大越好吗&#xff1f;下面我们就来一起看看吧。选…

显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...

更出色的表面分析ZEISS Smartproof 5产品表面粗糙度质量控制ZEISS Smartproof 5是一款集成式转盘共聚焦显微镜&#xff0c;依托孔径关联技术将传统共聚焦显微镜的高分辨率与转盘系统的高速采集相结合&#xff0c;能够高速、准确地采集表面3D数据。二维测量&#xff1a;距离、高…

Java 程序执行过程的内存流程图(手写稿)

操作系统会分配一定的内存空间给JVM&#xff0c;空间大小可以在JVM里面设置&#xff0c;JVM会将内存分为三个区域&#xff1a;栈、堆、方法区。

dc/os_DC / OS中具有Java和数据库应用程序的服务发现

dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现&#xff1f; 应用程序通常由多个组件组成&#xff0c;例如应用程序服务器&#xff0c;数据库&#xff0c;Web服务器&#xff0c;缓存和消息传递服务器。 通常&am…

python进阶项目设计_Python进阶循环设计

之前在“循环”一节&#xff0c;我们已经讨论了Python最基本的循环语法。这一节&#xff0c;我们将接触更加灵活的循环方式。1. 利用range(), 得到下标在Python中&#xff0c;for循环后的in跟随一个序列的话&#xff0c;循环每次使用的序列元素&#xff0c;而不是序列的下标。之…

Struts2请求处理的内部流程图/结构图/原理图(版本二)

文章目录请求处理流程图流程说明请求处理流程图 流程说明 第 1 步&#xff1a; 客户端初始化一个指向 Servlet 容器&#xff08;例如 Tomcat&#xff09;的请求&#xff0c;例如&#xff1a;在浏览器中输入 http:localhost:8080/Struts2/helloworld/helloworldAction.action …