Java 生态圈与微服务

摘要

微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。而Java 技术具有卓越的通用性、高效性、平台移植性和安全性。当两者进行碰撞,又将会擦出怎样的火花?

视频内容

Java老矣,尚能饭否?

Java诞生于1995年,1996年发布了1.0版本;2004年,发布量大更新1.5,并改为5.0;2014年,发布了Java8;2017年,发布Java9(根据OpenJDK官网,9月发布正式版)。

在TIOBE编程语言排行榜中,Java长期位居榜首,是2015年的年度编程语言。通过Google Trends,可以看到Java的搜索量远高于紧随其后的几门语言。

学习语言时,大家都会从HelloWorld写起,在Spring Boot的帮助下,Java也能通过几行代码写出一个HelloWorld的REST服务,比起目前流行的Go语言毫不逊色。

在平时的工作中,大家写的并非HelloWorld,大多数人都是在写业务逻辑,所以大家更关心语言本身的优势,以及它的工具链和生态环境。

微服务与语言

所谓微服务,就是一些协同工作的小而自治的服务,这里需要解释两点,首先是“一些”,微服务并非一个服务,而是几个相关服务的集合;其次是“小而自治”,服务要小,我们不鼓励大而全的服务。

微服务与语言两者间并没有什么必然的关系。微服务的好处就是可以带来微服务的异构性,用所有语言都可以写出合格的微服务。没有最好的语言,只有最合适的使用场景。

在我看来,微服务最应该关注的不是开发,也不是运维,而是如何设计微服务,业务上的设计远比代码上的实现来得重要。此时领域驱动设计就显得如此重要,先从领域模型入手,设计合理的服务,然后再来谈微服务落地。

微服务的落地需要考虑很多问题,比如服务的实现、如何开发、如何测试、服务的运维、可运维和高可用。

微服务与JAVA

进入微服务的落地环节之后,就要和语言有关了。比方说微服务该如何测试?微服务的服务提供方需要优雅地调用自己,而服务消费方要模拟提供方的反应。

如图是一个服务提供方的简单测试。

上图是消费者一端的测试。

在Java中可选择的代码质量工具还是有很多的,比如测试覆盖率工具、Mock工具、性能测试工具、持续集成工具以及代码扫描工具。这就是生态圈的强大。

另一方面,微服务也需要受到保护,比如服务的认证与授权。在一些场景下,开发和测试环境是相通的,测试环境的请求可能会跑到开发生产环境中去;甚至有些情况下整个集团的网都是通的。这时就需要做服务的认证与授权。

OAuth2.0可以用来提供各种服务授权,不仅对外也能对内。它的授权模式有授权码模式、简化模式、密码模式和客户端模式,在内部服务中一般会用客户端模式。

同样,Java的生态圈中还有很多安全相关的工具,比如安全框架、签名&摘要工具和加解密工具等等。

当服务的数量到达一定成都后,就需要考虑服务的发现与注册,Spring Cloud默认提供了Eureka作为注册中心,但同时也可以使用Consul,虽然Consul不是Java写的,但配合Spring Cloud Consul也很好用。类似的还有国内非常知名的Dubbo。

在Spring Boot和Spring Cloud的帮助下,我们可以很方便地了解到服务的运行情况,比如通过Hystrix实现服务降级:

通过Zipkin实现链路分析,配合标准化的日志,结合ELK等工具,能对信息做进一步的统一处理。

虽然Spring很强大,Spring Boot和Spring Cloud也红的发紫,加之Java庞大的生态圈,但也不要指望开源软件拿来就能用,在实际日常工作中,整合的工作是一定会有的,而且总会出现定制的需要。

总结

对于微服务而言,设计合理的业务模型很重要。

微服务与语言并没有太大的关系。

完整的生态环境能帮助你快速地将微服务落地。

我今天的分享就到这里,谢谢大家!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2017-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构

随着RESTful web服务和JSON数据交换格式流行,简单快速建立一个可连接的服务已经越来越方便了。随着持续交付概念推广以及Docker容器普及,微服务将这...

1412
来自专栏ThoughtWorks

从三明治到六边形|洞见

软件项目的套路 如果你平时的工作是做各种项目(而不是产品),而且你工作的时间足够长,那么自然见识过很多不同类型的项目。在切换过多次上下文之后,作为程序员的你,自...

3324
来自专栏phodal

test

我的上一篇关于自动化测试的文章,大抵已经在一年以前——《哪个才是最适合你的 Web UI 自动化测试框架》。这么长的时间里,没有相关的文章,总得给自己找一个合适...

1023
来自专栏FreeBuf

小型互联网企业安全建设的管窥之见

最近发现大家都在讨论一个人的安全部这个话题,两年前在某A轮互联网公司(80人左右的研发团队)做过一段一个人的安全部的经验就简单分享自己的经验。之前也在FreeB...

1073
来自专栏互扯程序

微服务(Microservice)那点事

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

3755
来自专栏Java架构

Java开发者不会这些永远都只能是三流程序员,细数一下你是不是?

2165
来自专栏java一日一条

前谷歌高级Java架构师分享工作8年经验(如何成为一名架构师)

很多工作一定年限的程序员感觉自己到了瓶颈不知道怎么去突破,其实这个时候就要冲破传说中的架构师。

2051
来自专栏美团技术团队

美团外卖iOS多端复用的推动、支撑与思考

美团外卖2013年11月开始起步,随后高速发展,不断刷新多项行业记录。截止至2018年5月19日,日订单量峰值已超过2000万,是全球规模最大的外卖平台。业务的...

1253
来自专栏王亚昌的专栏

如何对产品运营情况进行监控

http://groups.google.com/group/dev4server/browse_thread/thread/8a86bb49a561f312

1222
来自专栏花叔的专栏

微震,你感受到了么?

当你看到这篇文章时,证明这是公众号平台自动推送的。 别误会,我说的微震,是指微信的小震荡。 什么意思? 先说说大家能感受到的,微信最近搞了3个事情: 群发文章可...

3969

扫码关注云+社区

领取腾讯云代金券