Java 微服务实用指南(一)( 四 )
文章插图
有趣的是 , 回溯历史可以发现 , 标准化走得太远了 。 某些财富 500 强公司甚至不允许他们的开发人员使用 Spring , 因为它“不在公司的技术蓝图中” 。
建议:
如果你打算使用多语言 , 请尝试减少同一编程语言生态系统中的多样性 。 例如:Kotlin 和 Java(它们都基于 JVM , 彼此之间 100% 兼容) , 而不是 Haskell 和 Java 。
Java 微服务的部署和测试请快速回顾一下本文开头提到的基础知识 , 这对本节会有所帮助 。 任何服务器端的 Java 程序 , 都是.jar 或.war 文件 , 因此也包括微服务 。
在 Java 生态系统(更确切地说是 JVM)中 , 有一件事情很棒:只写一次 Java 代码 , 基本上就可以在任何你想要的操作系统上运行 , 只要你用来编译代码的 JVM 版本不高于运行代码的 JVM 版本即可 。
理解这一点很重要 , 尤其是涉及到 Docker、Kubernetes 或云这样的主题时 。 为什么呢?让我们看看以下几个不同的部署场景:
一个简单的 Java 微服务部署示例我们继续以上文的银行系统为例 , 我们现在有一个 monobank.jar 文件(那个大型独体应用)和新提取的 riskengine.jar(第一个微服务) 。
我们假设这两个应用程序与世界上的任何其他应用程序一样 , 都需要.properties 文件 , 里面保存数据库 url 和凭证 。
因此 , 最简单的部署可能只包含两个目录 , 大致如下:
复制代码
-r-r------ 1 ubuntu ubuntu2476 Nov 26 09:41 application.properties-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jarubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar._______ _ _ /\\ / ___'_ __ _ _(_)_ ____ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \... -r-r------ 1 ubuntu ubuntu2476 Nov 26 09:41 application.properties-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jarubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar._______ _ _ /\\ / ___'_ __ _ _(_)_ ____ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \...
现在 , 还剩下一个问题:如何将.properties 和.jar 文件放到服务器上呢?不幸的是 , 这个问题的答案可就多喽 。
使用构建工具、SSH & Ansible 进行 Java 微服务部署对于 Java 微服务的部署 , 最无聊但又完美的答案是过去 20 年中管理员为公司部署 Java 服务器端程序的方式 。 它包括:
- 你最喜欢的构建工具 (Maven、Gradle)
- 古老但好用的 SSH/SCP , 用于将你的 jar 包复制到服务器
- 用于管理部署脚本和服务器的 Bash 脚本
- 或者一些更好的: Ansible 脚本 。
陈腐老旧、毫无新意 , 但的确有效 。
如何使用 Docker 进行 Java 微服务部署转回到这个诱人的选择 。 几年前 , 出现了 Docker 和容器化的主题 。
如果你以前没有使用过它 , 那么可以先了解一下它对最终用户或开发人员的意义所在:
- 容器(简化过的)就像一个古老的虚拟机 , 但更轻量级 。 看看这个 Stackoverflow 上的回答 , 理解一下轻量级在这个上下文中意味着什么 。
- 容器保证是可移植的 , 它可以在任何地方运行 。 这一点是不是有点耳熟?
文章插图
有趣的是 , 由于 JVM 的可移植性和向后兼容性 , 这个好处听起来好像没那么了不起 。 你可以在任何服务器、树莓派(甚至是移动电话)上下载一个 JVM.zip 文件 , 解压缩后运行任何你想要运行的.jar 文件 。
但是 , 对于 PHP 或 Python 之类的语言来说 , 情况就有点不同了 , 因为这些语言的版本不互相兼容或其部署配置历来都比较复杂 。
或者 , 如果你的 Java 应用程序依赖于大量其他要安装好的服务(使用正确的版本号):比如像 Postgres 之类的数据库或者像 Redis 之类的键值存储 。
所以 , Docker 对于 Java 微服务 , 或者说 Java 应用程序的主要好处在于:
- 使用像 Testcontainers 这样的工具来搭建同质化的测试或集成环境 。
- 使复杂的部署“更容易” 。 以 Discourse 论坛软件为例 。 你可以用一个 Docker 镜像部署它 , 它包含了你需要的所有东西:从用 Ruby 编写的 Discourse 软件 , 到 Postgres 数据库 , 再到 Redis 和几乎所有的一切 。
- 人民币|天猫国际新增“服务大类”,知舟集团提醒入驻这些类目的要注意
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- 出海|出海日报丨短视频生产服务商小影科技完成近4亿元 C 轮融资;华为成为俄罗斯在线出售智能手机的第一品牌
- 成为佛山移动服务体验官 表白留言赢取百元话费
- 正确|新昌消防丨听说,这才是微信新表情的正确打开方式
- 优化|微软亚洲研究院发布开源平台“群策 MARO” 用于多智能体资源调度优化
- 手机|原来微信一键就能拼接长图,朋友圈可发送几十张照片,涨知识了
- 试试|手机内存不够用,咋办?试试关闭微信这两步操作,轻松腾出几个G
- 微信群|社区团购的前世今生
- 纳闷|英媒纳闷:安道尔这个国家微信用户高达2000万,可只有8.5万人!