可能你会面临这样一种情况,在架构设计之前,你对业务不甚了解,需求给到的也模棱两可,这个时候你既无法明确到底是要使用单体架构还是使用微服务架构,如果使用单体,后续业务扩展可能带来大量修改,如果使用微服务,前期可能在工期上把项目给耽误了,你该怎么办?这就是这篇文章想要研讨的面向微服务的单体架构的由来。

为什么不用传统单体架构?

  我们可以看到随着业务的升级,单块的代码的拆分会变得越来越困难,如果在前期没有做好规划和伏笔,那么后续的演化就是一场灾难。所以,目前的设计如果是企业级别的,都必然要做架构的适当冗余,因为没有人能知道未来长什么样,架构必然和业务一样是随着综合因素慢慢长出来的,不可能一蹴而就,一步到位。

为什么不用微服务架构?

微服务痛点
  • 数据一致性分发
  • 数据聚合 Join
  • 分布式事务
  • 单体系统解耦拆分
什么时候开始用微服务

  这里引用架构师杨波(前Ebay架构师/携程/拍拍贷研发部总监,资深技术架构师,微服务技术专家)的一些观点:

“企业一开始不推荐直接使用微服务,因为微服务需要前期基础设施的投资,复杂性很高(详见下面微服务的四大痛点),如果对问题领域并不是很理解,一开始用微服务,你很难去划分服务的边界,你的生产力反而会比较低,而且你花了很大精力进行开发,你的产品并没有被市场验证过,有可能会失败,所以这个选项风险会比较高。所以我们推荐的是单块优先,先从单块运用做起,这样成本低,团队成员也比较少,无须太多研发投入,就可以交付一些基本的功能给客户使用。

  随着应用越来越成功,客户增加,你的系统复杂度会越来越高,就会出现单块应用和团队规模之间的矛盾,生产力会随着业务复杂度逐渐降低。所以在一些初创型公司,你更多看到的是单块应用,只有一些中大型的公司会看到微服务架构。”

  “交叉点表明,业务已经到达了一定的复杂性,单块应用已经无法满足业务增长的需要,研发效率开始下降了,而微服务可以提升研发和交付的效率。这个点需要架构师去综合、权衡。个人经验,一般团队需要达到百人规模,才去考虑微服务。”

  • 并发量不高——业务流量并没有达到千万或亿级别
  • 团队规模——团队成员并没有达到百位规模
  • 系统复杂度——没有高并发也就谈不上复杂度
  • 适用场景——互联网/物联网

微服务兼容的单体架构

演化方便——低代码演化

  如上所示,我们可以看到API在拆解过程中,基本没有做任何代码变更(具体代码可以查看我的GitHub或者你也可以参看我的视频《ABP vNext框架实战系列》),Domain的演化也只是做代码简单迁移,整个重构过程并没有做多大的变化。这就是所谓“持续提升程序员幸福指数"的模块化之道啊。

总结

  ABP vNext的模块化思想给了微服务演化提供了底层能力,我在这儿只是抛砖引玉,希望有更多的人能参与进来进行分享。如果你想了解更多ABP vNext的地方,你也可以参看我的另外一篇文字《浅谈Abp vNext的模块化设计》,谢谢您的捧场。

  Abp vNext是一款优秀的框架,但是要从零开始能把每个角落都熟悉起来需要不少摸索时间,希望通过自己的经验给你的快速学习赋能,抛开生成器,一起从零开始,手工打磨一款生产级别的框架,让你对AbpvNext知其然,知其所以然。

持续提升程序员幸福指数——使用abp vnext设计一款面向微服务的单体架构的更多相关文章

  1. Java程序员应该了解的10个设计原则

    引用: http://www.cnblogs.com/leehongee/archive/2012/03/18/2404760.html 面向对象设计原则是OOPS(Object-Oriented P ...

  2. 程序员心髓:移动应用API设计10大技巧

    移动App与基于Web/云服务发生对话是很常见的事情,最简单的可能仅仅只是检索数据,但也可能包含发送数据.用户授权和管理.而这也就验证了为移动应用建立API的重要性,为此,我们特总结了10大移动API ...

  3. 左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈

    [题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] 1.pop.push.getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构. ...

  4. Abp vNext 切换MySql数据库

    Abp vNext是Abp的下一代版本,目前还在经一步完善,代码已经全部重写了,好的东西保留了下来,去除了很多笨重的东西,从官宣来看,Abp vNext主要是为了以后微服务架构而诞生的. 从源码来看, ...

  5. ABP vNext

    一.简要介绍# ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 8 月 20 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.19.0,可以尝试用于生 ...

  6. abp vnext 开发快速入门 1 认识框架

    最近在做一个项目,用的框架是Abp vnext ,不是Abp, 我自己也是刚开始用这个框架来做项目,难免要查资料,这个框架官方有中文文档,可以到官网www.abp.io 去查看,国内也有一些写了相关的 ...

  7. [Abp vNext 源码分析] - 3. 依赖注入与拦截器

    一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...

  8. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  9. [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)

    一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都 ...

随机推荐

  1. GAN和GAN的改进

    GAN 原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例: 其中是真实样本分布,是由生成器产生的样本分布. 第一个式子我们不看梯度符号的话即为判别器的损失函数,log ...

  2. 冲刺随笔——Day_Eight

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...

  3. charles 常用功能(七)简易接口压力测试(repeat advance 功能)

    接口请求次数.并发量.请求延迟时间均可配置 1.选中需要进行测试的接口,鼠标右键 选中[repeat advance] 设置迭代数量

  4. python核心高级学习总结7---------正则表达式

    正则表达式在爬虫项目中应用很广泛,主要方面就是在字符串处理方面,经常会涉及到字符串格式的校验,用起来经常要查看文档才能完成,所以抽了个时间将正则的内容复习了一下. Start re---导入re模块使 ...

  5. no Qt platform plugin could be initialized问题的解决办法

    ☞ ░ 前往老猿Python博文目录 ░ 今天因要使用到一个以前PyQT写得工具,但运行时报错: This application failed to start because no Qt plat ...

  6. web移动端css reset

    通用版css reset,pc端使用只需要修改html{font-size: 10px;}为html{font-size: 12px;} @charset "utf-8"; htm ...

  7. AcWing 328. 芯片 (二进制写法)

    题目链接 我自闭了,调了一下午,我居然认为 \(2, 3\) 凑不出 \(7\),我怕是个孤儿. 这是一位非要用二进制写的勇士. 首先定义状态 \(S\),若 \(S\) 的二进制第 \(k\) 位为 ...

  8. 题解-[WC2011]最大XOR和路径

    [WC2011]最大XOR和路径 给一个 \(n\) 个点 \(m\) 条边(权值为 \(d_i\))的无向有权图,可能有重边和子环.可以多次经过一条边,求 \(1\to n\) 的路径的最大边权异或 ...

  9. CentOS配置Nginx官方的Yum源

    由于yum源中没有我们想要的nginx,那么我们就需要创建一个"/etc/yum.repos.d/nginx.repo"的文件,其实就是新增一个yum源. [root@niaoyu ...

  10. 廖雪峰官网学习js 字符串

    操作字符串: length()           长度 totoLowerCase() 小写 toUpperCase()      大写 trim()            移除空白 charAt( ...