小型项目的微服务架构指南
原文在我的博客:blog.zlb37.xyz/2018-04-20_…
目前对小型项目的讨论非常少。对于大多数创业团队来说,项目初始都不会太大,通常对开发速度和开发成本的要求低于开发质量,加上多数创业团队的技术负责人快速解决具体问题的能力,但并没有良好的架构设计能力。往往在项目庞大到一定程度后,整个项目的可维护性越来越差。我在上一家公司的时候,入职时面对的就是一个典型的不可维护项目,修改任何一处都要耗费数倍于重写的时间,在得知技术负责人不想重写整个项目后,我选择了离职。
对于创业公司来说,存在着这么几个非常棘手的问题:
- **人员素质低。**创业团队需要节约钱,于是通常喜欢低于市场价招程序员,甚至在校实习生。这些人员的素质良莠不齐,但总体上说,代码质量堪忧,规范性不懂,骚操作倒是很多。
- **人员流动大。**创业团队往往员工成长较快,当薪资跟不上的时候,员工极易离职,甚至一些负责人都会离职。离职后留下的代码其他人往往都不愿意去维护。
- **需求变化快。**不要说产品经理的习惯性改需求,就是老板也会时不时的有什么新的主意。为了速度,或者开发人员应付差事,
这些客观问题是存在而且难以解决的,作为小型项目的技术负责人来说,需要利用这些有限的资源,尽量快速高质量的完成各种任务。
我负责的上一个项目完全使用RESTFul风格,每个API URL都对应着一个Resource
,由Resource
去调用Service
(第三方服务)、Model
(数据库操作)。但随着项目的增大,Resource的数量越来越多,截至目前,我们内部代号为“LSB”的项目后台代码拥有153个Resource
,虽然每个Resource的功能都比较简单,但这么多Resource
导致项目越来越难以理解。由于部分需求的反复修改,部分Resource
也已经被改的面目全非。
不得不服RESTFul下的横向扩展能力是如此之强,但扩展多了未免感觉像一个庞然大物。
所以决定按照微服务的方式拆分项目。
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用。这些小应用之间通过服务完成交互和集成。每个小应用从前端,到后台,数据库访问,数据库都完全是独立的一套。
那么,根据这个标准,我们可以把一个公司的的系统分为以下几个部分:
- 人事管理服务
- 客户管理服务
- 内容发布服务
这三个服务都有自己独立的数据库、后台程序、UI,其中人事管理服务存储了公司所有员工的信息、权限、凭证,为另外两个服务提供RESTFul风格接口。其本身提供的UI可供公司人事部门管理员工,以及员工自己进行修改密码等操作。
RESTFul有四个基本操作:POST
、DELETE
、PUT
、GET
,其设计这里不再多说(大家可以看我的文章《REST - 如何抽象为资源(RESOURCE)》),简单设计一下:
- 员工资源
- 增:新增员工
- 删:删除员工
- 改:修改员工资料
- 查:按条件查找员工(开放)
- 员工权限
- 增:为员工授权
- 删:为员工解除授权
- 查:
- 查询员工是否有某项权限(开放)
- 查询员工权限列表
- 权限资源
- 查:查看权限列表
这里使用了类似RBAC的权限模型,不懂的可以略过
这里一个服务只有3个Resource,而且如果公司招的都是有全栈能力的程序员,这个就是一个人的活,非常好追责(额)。
经过按照微服务划分的后,单个微服务开发难度非常低,即使员工能力有限,把这个服务安置按量的开发出来没有什么难度。其内部也非常好理解,即使人员有变动也很好维护。而且拆成这个种程度了,如果真的需求有变化,把这个微服务扔掉重新写代价也不是很大。微服务架构比较好的解决了创业公司在开发小型项目的这个三个痛点。
不过,我感觉以后的业务程序员,不再像是一个技术岗位,而是像一个流水线工人,只有上面把需求设计整理好,听话做出来就好。
转载于:https://juejin.im/post/5ad9ec20f265da0b702576f1
小型项目的微服务架构指南相关推荐
- Golang 云盘项目(微服务架构)
- 微服务架构案例(01):项目技术选型简介,架构图解说明
本文源码:GitHub·点这里 || GitEE·点这里 一.单体架构 单体架构在中等偏小的业务中比较常见,场景模式就是单个应用.单个数据库.一个程序包(例如war格式或者Jar格式)包含所有业务需求 ...
- 微服务架构与SpringCloud:微服务架构的特点
微服务架构与Spring Cloud 近几年大家都在谈论云原生和微服务,例如 © 云原生技术能够帮助公司和机构在私有云.公有云和混有云等新型动态环境中,构建和运行可弹性扩展的应用. 微服务架构是一项在 ...
- 时下流行devops关键词:分布式架构、一体化架构和微服务架构
技术趋势关键词:分布式架构+微服务架构(针对移动互联网)+一体式架构(前两者结合+UI等敏捷开发) [译者的话]otto.de是德国的一家网上购物网站,本篇前半部分主要介绍了几个系统架构以及它们的优缺 ...
- nodejs微服务:单体架构与微服务架构
单体架构 单体架构在中小企业内部用的是非常多的,就是完整独立的web服务 当业务不复杂,团队规模不大的时候,单体架构比微服务架构具有更高的生产率 1 ) 单体架构的程序部署在单台服务器 这种架构是目前 ...
- 微服务架构设计基础之领域驱动设计
背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微 ...
- 你所不了解的微服务架构
一直以来,系统的架构设计是IT领域经久不衰的话题,也是构建每一个系统最核心且重要的部分之一.它决定了系统能否满足业务.技术.组织.灵活.可扩展性等多种要求,同时肩负起了解放程序员生产力的作用. 201 ...
- Java程序员进阶必读,最全微服务架构技术点详解来啦
前言 微服务作为这个互联网时代最火的技术之一,想必大家即使没有学习过也有所了解,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服 ...
- java开源项目及spring微服务架构
开源项目地址:weiit - NO.1的数字化零售SaaS开源方案商(Java企业级开源SaaS服务商) 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA 架构到微服务架构的过程 ...
- 微服务架构实战项目Serverless的持续交付与架构案例
Serverless的持续交付 架构图如下: 在这个架构中,我们采用了前后端分离的技术.我们把 HTML,JS, CSS 等静态内容部署在 S3 上,并通过 CloudFront 作为 CDN 构成了 ...
最新文章
- php fatal class ziparchive not found,php中Fatal error: Class ZipArchive not found的解决办法
- 2017-06-08 前端日报
- r语言的MASS包干什么的_怎么记住r语言这么多包?
- asp.net mvc中用 log4net记录日志到数据库中
- 学习笔记(56):Python实战编程-Menu
- fit、transform与fit_transform
- 批处理定时mysql备份数据库_定时备份mysql数据库的批处理
- 对github的初步认识以及对软件技术基础课程的期待
- Hive的使用之hwi
- 织梦dede:channelartlist调用排除指定typeid栏目
- vue 预检_vue全家桶+element 项目踩坑总结
- C++编程学到什么程度可以面试工作?
- 条款十一: 为需要动态分配内存的类声明一个拷贝构造函数和一个拷贝赋值运算符...
- C#反编译软件查看dll文件源码
- 联想l430主板图纸_【有图】Thinkpad L430升级内存,点亮,成功实现双通道!附详细教程及评测!!!...
- pycharm(Idea)破解到2100年
- 关于工作后定居城市的思考以及房价预测(天涯原创)
- Java GC G1 详解
- Flutter 2.10 开发Windows桌面应用快速入门
- 用计算机研究心理,计算机使用中的自我效能感
热门文章
- 亚马逊平板刷机Linux系统,亚马逊平板刷机步骤盘点【图解】
- 有道单词本添加js实现自动阅读单词
- MODIS数据下载、拼接、裁剪、8天合成月方法以及处理过程中遇到的问题及解决办法(简要整理)
- Axure8.0 注册码
- react小书,怎么渲染列表(react)
- T9社区注册流程记录(笔记)
- Windows10关闭80端口占用
- 什么是弱网测试?为什么要进行弱网测试?怎么进行弱网测试?
- 【生信技能树】GEO数据库挖掘 P7 6差异分析
- 安徽大学计算机专硕奖学金,2019年安徽大学新闻传播跨考华东师范大学计算机专硕,总分418,排名第一经验分享!...