真实生产级云原生微服务项目实战-项目概述
作者:互联网
真实生产级云原生微服务项目实战-项目概述
文章目录
项目初衷
微服务和云原生架构是目前互联网行业的技术热点,相关资料文档很多,但是缺乏端到端的贴近生产的案例,这就使得很多互联网开发人员(包括架构师),虽然学习了很多微服务理论,但是在真正落地实施微服务云原生架构的时候,仍然会感到困惑。
通过改造 Staffjoy 的开源项目,开发了教学版的案例项目。
整个项目采用微服务架构,并且可以一键部署到 Kubernetes 容器云环境。
希望通过实际案例项目的学习,让开发人员/架构师不仅能够深入理解微服务和云原生架构原理,同时能够在生产实践中真正地去落地实施微服务和云原生架构。
也希望这个项目成为微服务云原生架构的一个参考模板,进一步可以作为类似项目的脚手架。
项目介绍
改造了真实的生产级的开源项目 Staffjoy。
采用微服务架构,并且可以一键部署到 Kubernetes 容器云环境。
通过该项目不仅深入理解微服务和云原生架构的原理,同时能够在生产实践中真正的落地实施微服务和云原生架构。
项目目标
通过具体案例的形式,使用 SpringBoot 框架,开发一个贴近生产的微服务应用,并一键部署到 Kubernetes 容器云环境。
- 掌握微服务架构和前后分离架构设计
- 掌握基于Spring Boot 搭建微服务基础框架
- 进一步提升 Java/Spring 微服务开发技能
- 掌握 Spring Boot 微服务测试和相关实践
- 理解 SaaS 多租户应用的架构设计
- 理解可运维架构理念和相关实践
- 掌握服务容器化和容器云部署相关实践
- 理解云时代的软件工程流程和实践
项目架构
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
上图是经过调用链埋点监控后,在 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. 首页
2. 订购计划和价格页
3. 登录页
4. 雇员账户管理 SPA 单页应用
5. 我的公司 SPA 单页应用
补充说明
教学版的 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
标签:原生,服务,级云,项目,服务项目,应用,Staffjoy,架构 来源: https://blog.csdn.net/chentian114/article/details/123251002