NuLab Offices

生产力软件公司 Nulab 以微服务和 Kubernetes 提高了自己的生产力

Challenge

Nulab 的主要任务是构建生产力软件,但却发现自己的生产力被绘图产品 Cacoo 的旧版单体式 Java 应用程序拖了后腿。“我们的技术太老,”软件工程师 Jay Chen 说,“Cacoo 越来越大,真的很难找到系统里所有可能存在的漏洞。但我们必须要部署,还要知道它的运行情况,压力真的很大。”增加新特征花费的时间很长,加上公司在三个大洲都开设了办事机构,工程师们需要跨时区开发同样的应用程序。

Solution

Nulab 开始把单体应用程序拆分成微服务,选择 Kubernetes 进行编排。

Impact

产生影响:部署新代码到生产比以前快了 6 倍:从 40 分钟减少到 6 分钟。“这就大不一样了,”Chen 说,“拆分成微服务之前,每一个细小的变化都要等一个小时才能部署。”Kubernetes 还提高了可靠性。“我们的 SRE 团队不再需要不停地登录服务器,检查服务器宕机的原因,然后再重启服务器,”他说,“这些事情 Kubernetes 就都做了,它有自愈功能。如果微服务出现故障,不需要停机就能自动重启。”

挑战: 可靠性 , 扩展 , 速度

行业: 软件

地点: 日本

云类型: 公有云

产品类型: 安装程序

出版: September 29, 2020

使用的项目
Envoy
gRPC
Kubernetes
Prometheus
Stay informed

Get the latest news from our community of doers. Subscribe to the CNCF newsletter.

See footer for our privacy policy.

一些数据…

部署新代码到生产比以前快了 6 倍

部署只需 6 分钟,不再是 40 分钟

新工程师加入只需 1 天,不再是 1 周

Nulab 用生产力工具 Backlog、Cacoo、Typetalk 服务全球 400 万用户。“我们的使命是让大家不管身处何地,都会觉得生产力很有趣、很享受,”营销总监 Bing Han 说,“很多客户在全球各地都有办公室,他们都用我们的工具沟通。”

但 Nulab 却发现自己的生产力被运行在 AWS 上的 Cacoo 旧版单体式 Java 应用程序拖了后腿。“我们的技术太老,”软件工程师 Jay Chen 说,绘图工具 Cacoo 是 7 年前装在 Java 6 上的,每一次版本升级都要一个工程师花整整2 周时间,还要额外再花 1 周时间测试。“Cacoo 越来越大,真的很难找到系统里所有可能存在的漏洞,”他说,“但我们必须要部署,还要知道它的运行情况,压力真的很大。”

应用程序扩展很难,系统增加新特征或新功能也很难。“每一个细小的变化都要花费更长的时间,”Chen 说。

此外,Nulab 自 2004 年在日本创立之后,近年来将办公机构拓展到了 3 个大洲。2017 年,Nulab 的技术领袖开始寻求工程师全球办公解决方案。团队决定把单体应用程序拆分成 Go 语言写的微服务。“微服务对每个成员都绝对必要,这样就能跨时区开发相同的应用程序了,”Chen 说。迁移已经完成大约 80% ;但还有一个微服务在用 Java。“这就是微服务的魅力所在,”他说。

团队曾考虑用 Docker Swarm 做编排,但后来决定采用 Kubernetes。“Kubernetes 能支持我们需要的更多功能,”Chen 说,“Kubernetes 客户端都整合了 API,这是一个用户友好型 UI,可以用我们的证书登录。kubectl 是一个非常有用的指令,使用很简便。”

Nulab 团队使用 kops,为 Cacoo 应用在 AWS EC2 上创建自己的 Kubernetes,堆栈中还有其他 CNCF 技术:Prometheus、Envoy 和 gRPC。

凭借 Kubernetes,Nulab 取得了很好的结果。部署新代码到生产比以前快了 6 倍:从 40 分钟减少到 6 分钟。“这就大不一样了,”Chen 说,“拆分成微服务之前,每一个细小的变化都要等一个小时才能部署。”

Kubernetes 还提高了可靠性。“我们的 SRE 团队不再需要不停地登录服务器,检查服务器宕机的原因,然后再重启服务器,”他说,“这些事情 Kubernetes 就都做了,它有自愈功能。如果微服务出现故障,不需要停机就能自动重启。”

“Kubernetes 在所有客户端都整合了 API,这是一个用户友好型 UI,可以用我们的证书登录。kubectl 是一个非常有用的指令,使用很简便。”

— Nulab 软件工程师 Jay Chen

正如预期,微服务提高了 Nulab 分布式团队的工作效率。“现在我们能给每个微服务分配职责和所有权,所以就不会再有代码合并冲突了。工作顺利了,还给我们省下了大把时间。”

新的架构和 Kubernetes 使 Cacoo 团队增加产品新特征成为可能,新增加的事件系统会在一个用户更新团队的 Cacoo 图表时,向团队所有成员发送通知。之前,“很难创建这样的系统,所以我们推迟了计划,”Chen 说。现在有了微服务架构,“创建流程完善这个特征很容易。”

从第一天开始,Nulab 的软件工程师就有“简便许多”的使用体验,Chen 说。“用单体应用程序的时候,我们要给每个工程师都安装 Java 和所有的产品服务器。Java 版本是我们面对的一个大问题。版本不对,就没法启动。所以每一次有新工程师加入,我们就得搭上一周时间。”

而现在,只需要一天。Nulab 的本地开发环境用 Docker Compose。“新加入的工程师只需要克隆一份报告,所有内容就都安装、创建到容器里了,不会有任何问题,”Chen 说,“对工程师和 SRE 团队来说,管理变得简单了。kubectl 指令能解决一切问题。”

“现在我们能给每个微服务分配职责和所有权,所以就不会再有代码合并冲突了。工作顺利了,还给我们省下了大把时间。”

— Nulab 软件工程师 Jay Chen

Chen 给其他考虑使用微服务和 Kubernetes 的用户提出如下建议:“你不能仅是拆除旧版应用,然后马上就开始使用微服务。你要慢慢迁移,检查是否所有功能都能正确实施。所以最好的方法就是一个一个地转为微服务。”

鉴于 Nulab 仍在迁移过程中,Chen 建议使用 RabbitMQ 进行微服务和旧版应用程序之间的通讯。“我觉得继续使用旧版应用程序是一个不错的解决方案,这样在旧版应用程序和微服务之间,不会有过多依赖,”他说。

Nulab 团队最终希望实现完全迁移,全部改成微服务,这样就能完全移除旧版应用了。Chen 说:“这给我们省下一大笔钱。” Backlog 项目管理工具正在准备进行下一次迁移,会给整个 Nulab 公司节约不少费用。“最初只是在 Cacoo 上试验一下,我们觉得试验非常成功,”Chen 说,“所以我们要把解决方案推广到公司其他团队。”

Join the CNCF end user community and accelerate your cloud native technology adoption in close collaboration with peers, project maintainers and CNCF.