https://v.qq.com/x/page/a05355b1fl9.html

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庞大的生态圈,但也不要指望开源软件拿来就能用,在实际日常工作中,整合的工作是一定会有的,而且总会出现定制的需要。


总结


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


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


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


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


©著作权归作者所有:来自51CTO博客作者mob604756f692f5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 支撑百度搜索引擎99.995%可靠名字服务架构设计
  2. 微服务架构下的分布式限流方案全解析
  3. Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
  4. LVS+KeepAlived+Nginx高可用实现方案
  5. 为了做服务注册迁移,我提前准备了这些东西,来看看对你有没有用!
  6. Django 使用Celery处理异步任务
  7. 分布式系统架构中高可用方案技术选型:Hystrix 框架实现服务保护使
  8. 微服务开发神器之JRebel 插件破解和实现本地及远程热部署教程
  9. 推荐使用 SSH 方式连接 Git 服务

随机推荐

  1. go语言make的用法有哪些
  2. centos go语言环境怎么搭建
  3. go语言适合于哪些领域
  4. 有哪些大公司已经用Go语言了
  5. go语言有指针吗
  6. go语言是啥
  7. go属于解释型语言么
  8. go语言defer的用法是什么
  9. go语言有几种框架
  10. windows下怎么搭建go语言开发环境