真实生产级云原生微服务项目实战-项目概述


文章目录

  • 真实生产级云原生微服务项目实战-项目概述
  • 项目初衷
  • 项目介绍
  • 项目目标
  • 项目架构
  • 技术选型
  • 项目背景及需求
  • Staffjoy 公司和案例背景
  • Staffjoy 应用的功能需求
  • 项目界面预览
  • 补充说明
  • 资料
  • 公众号
  • 参考


项目初衷

微服务和云原生架构是目前互联网行业的技术热点,相关资料文档很多,但是缺乏端到端的贴近生产的案例,这就使得很多互联网开发人员(包括架构师),虽然学习了很多微服务理论,但是在真正落地实施微服务云原生架构的时候,仍然会感到困惑。

通过改造 Staffjoy 的开源项目,开发了教学版的案例项目。

整个项目采用微服务架构,并且可以一键部署到 Kubernetes 容器云环境。

希望通过实际案例项目的学习,让开发人员/架构师不仅能够深入理解微服务和云原生架构原理,同时能够在生产实践中真正地去落地实施微服务和云原生架构。

也希望这个项目成为微服务云原生架构的一个参考模板,进一步可以作为类似项目的脚手架。

项目介绍

改造了真实的生产级的开源项目 Staffjoy。

采用微服务架构,并且可以一键部署到 Kubernetes 容器云环境。

通过该项目不仅深入理解微服务和云原生架构的原理,同时能够在生产实践中真正的落地实施微服务和云原生架构。

项目目标

通过具体案例的形式,使用 SpringBoot 框架,开发一个贴近生产的微服务应用,并一键部署到 Kubernetes 容器云环境。

  1. 掌握微服务架构和前后分离架构设计
  2. 掌握基于Spring Boot 搭建微服务基础框架
  3. 进一步提升 Java/Spring 微服务开发技能
  4. 掌握 Spring Boot 微服务测试和相关实践
  5. 理解 SaaS 多租户应用的架构设计
  6. 理解可运维架构理念和相关实践
  7. 掌握服务容器化和容器云部署相关实践
  8. 理解云时代的软件工程流程和实践

项目架构

Staffjoy 教学版架构

云原生 业务上云 云原生项目_云原生 业务上云

  • Account API(账户服务),提供账户注册、登录认证和账户信息管理等基本功能。
  • Company API(公司服务),支持团队(Team),雇员(Worker),任务(Job)和班次(Shift)等核心领域概念的管理功能。
  • Bot REST API,是一个消息转发服务,它一方面作为队列可以缓冲高峰期的大量通知消息,另一方面作为代理可以屏蔽将来可能的通知方式的变更。
  • Mail Sender 和 SMS Sender,都是消息通知服务,分别支持邮件和短信通知方式,它们可以对接各种云服务,比如阿里云邮件或短信服务。
  • WhoAmI API,支持前端应用获取当前登录用户的详情信息,包括公司和管理员身份,团队信息等,它也可以看作是一个用户会话(Session)信息服务。
  • App(也称 MyCompany),单页 SPA 应用,是整个 Staffjoy 应用的主界面,公司管理员通过它管理公司、雇员、任务和排班等信息。
  • 单页 SPA 应用 :就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。
  • MyAccount ,单页 SPA 应用,它主要支持公司雇员管理个人信息,包括邮件和电话等,方便接收排班通知消息。
  • WWW 应用, 是一个前端 MVC 应用,它主要支持产品营销、公司介绍和用户注册登录/登出,这个应用也称为营销站点(Marketing Site)或者登录页(Landing Page)应用。
  • Faraday(法拉弟),是一个反向代理(功能类似 nginx),也可以看作是一个网关(功能类似 zuul),它是用户访问 Staffjoy 微服务应用的流量入口,它既实现对前端应用和后端 API 的路由访问,也实现登录鉴权和访问控制等安全功能。Faraday 代理是 Staffjoy 微服务架构和前后分离架构的关键,并且它是唯一具有公网 IP 的服务。

技术选型:

  • Staffjoy 微服务间通讯,包括对外暴露 API,全部采用 JSON over HTTP 标准方式。
  • 所有微服务(绿色标注)采用Spring REST开发,有数据访问交互的采用Spring Data JPA,数据库使用MySQL。
  • WWW 服务使用Spring MVC+Thymeleaf模版引擎开发。
  • Faraday 也是一个SpringBoot应用,内部路由和安全等逻辑基于Servlet Filter实现。
  • 两个单页 SPA 应用(暗红色标注)都是采用ReactJs+Redux框架开发。
  • 整个应用支持一键部署到本地Docker Compose环境,也支持一键部署到Kubernetes容器云环境,所以 Staffjoy 的整体架构是支持云原生的微服务架构。

skywalking

云原生 业务上云 云原生项目_云原生实践_02

上图是经过调用链埋点监控后,在 Skywalking Dashboard 上实时呈现出来的服务依赖关系图,这个依赖图和总体架构设计保持一致。

技术选型

  • Java/Spring、HTML、JavaScript、和MySQL
  • JDK 8 + Maven
  • Intellij IDEA
  • MySQL + Workbench
  • Node.js + npm
  • Docker

技术栈:

  • Spring Boot
  • Spring REST
  • Spring Data JPA
  • Spring MVC + Thymeleaf
  • MySql
  • ReactJs + Redux
  • Docker Compose
  • Kubernetes

开发和运行说明:

  • 开发和运行教学版 Staffjoy,需要安装一些必要的开发工具(操作系统不限),包括
  • JDK8,Maven 依赖管理工具,
  • Intellij IDEA 或者 Eclipse STS IDE,
  • MySQL 数据库和 MySQL Workbench 管理工具,
  • Nodejs/npm 前端开发框架,
  • Postman API 测试工具,
  • 以及 Docker 运行时环境。
  • 因为 Staffjoy 服务较多,如果要在本机跑,建议物理内存不少于 8G。

项目背景及需求

Staffjoy 公司和案例背景

Staffjoy曾经是美国硅谷的一家初创公司,成立于 2015 年,创始人是Philip I. Thomas,公司曾获得 Y Combinator 等知名机构的投资。

Staffjoy 的主要业务是为小企业提供工时排班(Scheduling)软件解决方案,帮助企业提升雇员管理效率,主要面向零售、餐饮等服务行业。

因业务发展和招聘等原因,Staffjoy 公司最终于 2017 年关闭,在关闭前,公司把核心产品大部分都开源贡献给了 Github 社区。

Staffjoy V2是公司关闭前研发的最新一款 SaaS 版企业排班系统,目前在 Github 上有超过 1k 星,总体设计和代码质量较高,目前有不少企业在定制使用。

Staffjoy V2 是一个小规模 SaaS 应用,采用微服务和前后分离架构,支持 Kubernetes/GKE 容器云环境一键部署,是学习现代 SaaS、微服务和云原生架构的一个模版项目。

Staffjoy 应用的功能需求

公示排班(Scheduling)SaaS服务

  • 功能
  • 管理员 Admin 管理公司和排班
  • 雇员 Worker 管理个人信息
  • 非功能
  • SaaS + 定制部署
  • 一键部署到 Kubernetes 容器云
  • 营销和客服友好(Marketing & Customer Friendly)

Staffjoy 应用的业务功能相对简单,简单讲就是帮助小企业管理者管理雇员和排班,并以短信或者邮件等方式,将排班信息及时通知到雇员。

具体讲,Staffjoy 主要支持两类用户角色和用例,

  • 一类是公司管理员(admin),他们可以通过 Staffjoy 管理公司(company)、员工目录(directory),团队(team)和雇员(worker),也可以创建任务(job),创建和发布班次(shift)信息;
  • 另一类是公司雇员,他们可以通过 Staffjoy 管理电话和邮件等个人信息,便于接收到对应的排班通知。

Staffjoy 应用主要以共享版 SaaS 服务形式提供,也支持针对一些大客户的定制私有部署,这就要求 Staffjoy 应用易于部署和运维,要支持一键部署到 GKE 等容器云环境。

另外,作为一款 SaaS 服务产品,良好的市场营销(Marketing)和客服是赢得用户的关键,所以 Staffjoy 需要提供营销友好的(Marketing Friendly)宣传和登录页(Landing Page),也要支持对接主流的在线客服系统如 Intercom。

项目界面预览

1. 首页

云原生 业务上云 云原生项目_Kubernetes_03

2. 订购计划和价格页

云原生 业务上云 云原生项目_云原生 业务上云_04

3. 登录页

云原生 业务上云 云原生项目_SpringBoot_05

4. 雇员账户管理 SPA 单页应用

云原生 业务上云 云原生项目_Kubernetes_06

5. 我的公司 SPA 单页应用

云原生 业务上云 云原生项目_Kubernetes_07

补充说明

教学版的 Staffjoy 虽然是一个较完整的 SaaS 应用,并且架构设计中考虑了很多生产性环节,但是它仍然只是一个教学演示项目,仅供学习参考,如果你要将它进行生产化应用(或者基于它的代码做其它项目的脚手架),则仍然需要对其进行严格测试和定制扩展。

资料

项目源码:

  • 原版 Golang : https://github.com/staffjoy/v2
  • 教学版 Java/Spring : https://github.com/spring2go/staffjoy
  • 教学版 gitee :https://gitee.com/geektime-geekbang/staffjoy

课件:

  • 百度云 https://pan.baidu.com/s/1Q7eP3yZ1Vm8J2nhle5RzTQ 提取码: 1aeh
  • github https://github.com/spring2go/staffjoy-ppt

参考

《Spring Boot 与 Kubernetes 云原生微服务实践 ~ 全面掌握云原生应用的架构设计与实现》 杨波

staffjoy开源项目: https://github.com/staffjoy/v2