英文原文:Cracking Microservices practices
在我还不晓得甚么叫微服务架构的时分我就运用过它。之前,我写了一些管道程序(pipeline application),它由一些互相和行列交互的模块组成。自那以后,一批ThoughtWorks的专家也会商过微服务。Fred George[1],接着是James Lewis[2]另有 Martin Fowler[3] 都写博文会商微服务,使得微服务变成了下一个时兴术语,如今每一个公司都想运用一些微服务。
如今有一些关于它的标签:endorsements,likes,trainings,乃至two day conferences.关于它的工作听得越多,意想到Apach Camel愈来愈搭配这类风格的程序。在这篇博文中,我们可以看到Apach Camel框架可以协助我们用几行Java代码创立微服务风格的使用程序。
在微服务架构中没有甚么新工具。好久之前就有人设计并完成了非常多相似的使用。微服务只是一个新名词,它描绘了一种具有某些特色并服从某些准绳的软件系统风格。它是如许一种架构风格:一个使用或软件由多个各自自力的服务构成,服务之间以一种基于事情的轻量级协议来实行通讯。在异样的方法下,TDD协助我们创立了单一职责的类,微服务准绳可以在系统级别上指点我们创立出容易的使用。
本文中,我们将不会会商微服务的准绳或者特征,也不会会商它究竟是完成SOA的一种方法仍是一种全新的软件设计进程,我们只是来看一下微服务的常用的理论方法,和Apache Camel是怎么协助我们完成微服务的。如今关于微服务还没有一个威望的定义,可是假如你看过上面提到的文章或视频,你会发明,下面这些都是微服务的很常用的理论方法:
1. 小范围. 微服务的最根本的准绳指的是,每一个使用程序范围很小,只专注于处置一件事,并做得十分好。从10 LOC到1000,构成程序范围的巨细不断是一个有争议的话题。我个人偏向如许一个观念,程序的范围应当恰好包容下你的脑壳。非常多人的脑壳很大的,所以这仍是一个有争议的话题(译者注:此处是玄色风趣,可疏忽)。我以为,一旦一个程序只做一件事并做得很好,这只是一个很好的范围,不是一个纳米服务(nanoservice)。The very fundamental principle of microservices says that each application is small in size and it only does one thing and does it well.
Camel程序与生俱来就是范围就小.一个同时具有错误处置和helper beans的CamleContext约莫有100LOC(line of code).因为有了Camel DSLs和URIs来提取终端地址,经过HTTP或者JMS承受事情,解包并发送呼应反应也不外50行代码(LOC).这关于了解端对端来讲足够范围小了,重写或抛弃如许的小范围代码也没有甚么遗憾。
其它翻译版本 (1) 加载中
2. 具有事务鸿沟。 一个由多个微服务组成的使用就构成了一个终极一致性的系统,而多个这类系统构成的大系统,其全体形态在给按时间点上都是不成知的。这就即是本人给本人设置了一个妨碍,使得那些不熟习分布式使用的团队更难于了解进而采取微服务架构。即便全部系统的形态不固定,运用事务鸿沟来定义音讯的归属也是很主要的。
在异构系统中确保事务化的操作可不是那末轻易,可是Camel却具有很强的事务支撑才能。Camel具有可以参与事务的终端、事务化的路由和错误处置、幂等的花费者和抵偿操作,一切这些能协助开发者轻松的创立出具有事务化行动的服务。
3. 自我监测。 这是我最爱好的微服务的特征之一。服务应当供给信息来描绘它所依靠的各类资本的形态和它本人的形态。这都是些统计信息,比方处置一个音讯的均匀时间、最大最小时间,成功和失败的音讯的个数,可以跟踪一个音讯,内存运用率等等。
这是Camel的开箱即用的功用。每个Camel使用都会默许汇集JMX统计信息,包含全部使用的信息、私有路由的信息、终端和花费组件的信息等。它会通知你有几多音讯成功处置了,有到少失败了,在哪儿失败的,等等。这些API不是只读性的,JMX也答应在运转时期对程序实行更新和调剂,也就是说你可使用统一套API,依据这些统计信息来响应的调剂使用程序。这些统计信息也能够用其它Tools来拜访,比方jConsole,VisualVM,Hyperic HQ等,也能够用Jolokia经过HTTP实行拜访,或者把信息供给给一个叫做Hawtio[6]的很棒的web UI组件。
图 1: Hawtio
假如开箱即用的功用不能知足你的特性化需求,也有一些扩大方法可以选择,比方nagios, jmx, amazon云监控组件和自定义事情阻拦器等。
音讯型使用的日记是另外一个应战,可是Camel的MDC日记联合Throughput日记器,就能够很轻易的来跟踪某些信息或者获得日记信息聚合后的统计信息。
5. 为处置失败而设计。 单个微服务有可能宕机或者一段时间内无呼应,但这不该该招致全部系统不成用。所以微服务应当可以容灾并在可能的时分实行恢复。
Camel也有很多有效的Tools和形式来处置这些情况。Dead Letter Channel可以确保音讯在传输失败的时分不会丧失,在某些错误发生时,重试战略可以借助于自定义后备办法和抵触防止战略,把一个音讯实行屡次发送。形式方面,比方支撑断路器[7]的Load balancer(负载均衡器), 比方Failover(容灾)和其它战略,比方Throttler(节省阀)可以确保某个节点不会负载太重,另有Detour, Sampler也都是在各类犯错情况下需求用到的。所以,有甚么来由不必这些,而要在每一个服务里从头造轮子呢?
6. 高可设置装备摆设性。 对统一程序应当经过容易的设置装备摆设就能够到达高可用性,应当很轻易扩大来到达牢靠性或进步吞吐量,或者换句话说: 经过设置装备摆设就能够具有分歧水平的自在。当运用DSL创立了一个Camel使用时,我们做的全体任务就是定义音讯流,设置装备摆设各类终端另有设置装备摆设使用的其它特征。所以说Camel使用被设计的高度可设置装备摆设化。当一切这些选项都被外化到设置装备摆设组件以后,就能够依照希冀来设置装备摆设和从头安排使用,基本无需碰触源代码。Camel是如斯的可设置装备摆设化,你乃至不修正任何程序代码就能够用一个终端来交换另外一个(比方用JMS来交换HTTP终端),这一点我们下面会讲到。
7. 具有智能终端。 微服务更偏向于运用REST风格的协议和轻量级音讯机制,而不是运用Web Services。Camel则甚么都支撑。它不需求其它框架就能够支撑HTTP。它有这类组件,比方异步HTTP, GAE URL获得服务, Apache HTTP Client, Jetty, Netty, Servlet, Restlet, CXF和用多种数据格局抵消息实行序列化/反序列化。关于行列方面的支撑状况,有各类开箱即用的衔接器,比方JMS, ActiveMQ, ZeroMQ, Amazon SQS, Amazon SNS, AMQP, Kestrel, Kafka, Stomp, 你能叫上名字的都有。
8. 可测试化。 关于这一特征没有一个特殊一致的见解。有点人偏向于基本不做测试而依靠于营业目标。有点人则压根儿不能忍耐呈现蹩脚的营业目标。我爱好TDD(测试驱动开发),爱好可以不依靠于实践的音讯流就能够测试我的营业POJO,如许经过模仿内部终端来测试音讯流就没有甚么价值了。Camel在测试方面可以支撑阻拦和模仿终端、模仿事情、轻松的对希冀后果实行验证。具有颠末杰出测试的微服务,是使得全部系统可以正常运转的独一保证。
9. 独自供给。微服务的最主要的特征是,服务是相互隔离运转的,并且凡是都是作为自力Java使用来运转。Camel可以嵌入到Spring,OSGI或者web容器中去。固然Camel也能够内置一个Jetty终端,然后作为一个自力的Java使用来运转。可是没有一个集中式的管理Tools的话,管理多个自力运转的使用可是个顺手的差事。而这恰是开发出Fabric8[8]的缘由。Fabric8是由开发Camel的统一帮人开发的,而且由Red Hat JBoss来保护。它是一个复合的Java使用供给和管理Tools,可以安排和管理多种Java容器和自力的过程。想要深化了解Fabric8的话,可以参考注释[9],它是Christian Posta写的一篇不错的文章。
10. 言语中立性。 采取小而自力安排的使用形式,使得开发者可以针对特定Task采取最适宜的言语。Camel以特定的语法和才能支撑 XML, Java, Scala, Groovy和其它一些DSL(范畴特定言语)。可是假如你在处置一个微服务时基本不想运用Camel的话,你依然可使用Fabric8来安排和管理那些其它言语编写的使用程序,并以当地过程的方法来运转它们。
总结: 微服务没有一个严格的定义,而这正是一种美。它是一种轻量级的完成SOA的方法,并且很好用。Apache Camel也是如斯。它不支撑ESB的全体特征,不外它可以作为JBoss Fuse的一部分。Apache Camel不是一个由严格定义的标准来驱动的项目,而是一个轻量级的Tools,并且开发者们爱它。
参考材料
[1] Micro­Service Architecture, by Fred George (video) https://www.youtube.com/watch?v=2rKEveL55TY
[2] Micro­Services ­ Java, the UNIX way, by James lewis (video) http://jz13.java.no/presentation.html?id=2a7b489a
[3] Microservices, by Martin Fowler http://martinfowler.com/articles/microservices.html
[4] μCon: The Microservices Conference https://skillsmatter.com/conferences/6312­mucon
[5} Nanoservices http://arnon.me/wp­content/uploads/2010/10/Nanoservices.pdf
[6] Hawtio http://hawt.io/
[7] Circuit Breaker Pattern in Apache Camel by Bilgin Ibryam http://www.ofbizian.com/2014/04/circuit­breaker­pattern-in­apache­camel.html
[8] Fabric8 http://fabric8.io/
[9] Meet Fabric8: An open­source integration platform by Christian Posta http://www.christianposta.com/blog/?p=376
[10] Micro Services the easy way with Fabric8 by James Strachan http://macstrac.blogspot.co.uk/2014/05/micro-services­with­fabric8.html
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务