如何设计一个基础服务?看完这篇文章别再说不会、不懂、不知道

看完这篇文章保你面试稳操胜券——Vue篇 很多伙伴都说进大厂很艰难,本人觉得在it行业想要进入规模比较大的互联网公司,首先有个本科学历作为敲门砖就够用了,足以敲开大厂的大门,然而向你迎面走来的面试官只有你足够强大才能去应付他,博主今天就为大家总结一套前端面试题,很强势呦,让你在面试过程中 solo 全场。 跟伙伴们聊天中了解到,大家普遍认为前端的面试题比较杂乱,很难去看全,在这里小编告诉你,嗯。。。。确实如此,因为前端面试的话根据公司的产品不同、运用技术不同、乃至面试官的习惯不同都可能导致问你的问题都是你没有了解过的,不过不要慌,今天小编为你总. 阅读详情

最新互联网大厂面试真题、Java程序员面试策略(面试前的准备、面试中的技巧)请移步GitHub


我们知道,落地一个微服务其实并不困难,但要实现一个能够高度复用的共享服务并不容易,在落地过程中,经常会有一系列的问题困扰着我们。

我们事先对服务的边界没有进行很好的划分,结果在落地的过程中,大家反复争论具体功能的归属。

由于对业务的了解不够深入,我们要么设计不足,导致同一个服务有很多版本;要么服务过度设计,实现了一堆永远用不上的功能。

对于落地一个共享服务来说,服务边界的划分和功能的抽象设计是核心。服务边界确定了这个服务应该“做什么”,抽象设计确定了这个服务应该“怎么做”。

接下来,我就以一个实际的订单服务例子,为你详细讲解一下要如何重点解决这两个问题。这样你可以通过具体的案例,去深入地理解如何落地共享服务,实现业务能力的复用。

订单业务架构

不同企业的订单业务是不一样的,所以这里我先介绍下这个订单的业务场景。

这是个 O2O(Online To Offline,线上到线下)的交易业务,订单的来源有两个,一个是自有小程序或 App 过来的订单,还有一个是外卖平台过来的订单,然后这些线上的订单会同步到门店的收银系统进行接单和进一步处理。这里我放了一张订单的业务架构图,你可以到文稿中看下:

在这里,订单服务是和 4 个应用直接打交道的:

  • 小程序服务端调用订单服务落地自有线上订单;
  • 外卖同步程序接收三方外卖平台的订单,然后调用订单服务落地订单;
  • POS 同步程序通过订单服务拉取订单,并推送给商户内部的收银系统;
  • 最后还有一个订单管理后台,通过订单服务查询和修改订单。

OK,接下来,我们就具体看下,如何从头开始落地这个订单服务。

订单服务边界划分

首先,我们要确定这个服务的边界,这是进行服务内部设计的前提。划分边界时,你需要对相关的业务场景有充分了解,并且在一定程度上,能够预测潜在的需求。

根据业务场景的分析,这个订单服务需要负责三个方面的功能。

1. 基本信息管理

首先是订单基本信息管理,主要提供订单基础信息的增删改查功能,包括下单用户、下单商品、收货人、收货地址、收货时间、堂食或外卖、订单状态、取餐码等。

另外,你需要注意的是,这里有多个下单渠道,除了通用的订单信息,每个渠道还有特定的渠道相关信息,比如堂食的订单要有取餐码、外卖的订单要有收货人和收货地址等等,这个都需要在我们的数据模型里给出定义。

2. 订单优惠管理

然后是订单优惠管理功能,这对应的是订单的小票信息,从最开始的商品金额,到最后需要用户实际支付的金额,中间会有一系列的折扣和减免,这些都是属于订单信息的一部分。这些信息我们需要展示给用户看,如果后续要进行订单成本的分摊,也需要用到它。

3. 订单生命周期管理

最后是订单的生命周期管理功能,主要负责管理订单的状态变化。我们知道,从不同下单渠道过来的订单,它的状态变化过程是不一样的;不同行业的订单,它的状态变化过程也是不同的,所以订单服务的状态要做到通用,能够支持各种可能的状态定义和状态转换过程。这个也是订单服务设计的难点,我在后面会重点介绍。

好了,现在我们已经给出了订单服务的功能。为了更好地定义边界,在实践中,你还需要澄清哪些功能不属于服务,这样可以避免后续的很多争论。所以在这里,我会进一步给出订单

服务不包括的功能,你在划分自己的服务边界时最好也能够明确给出。

第一,作为基础服务,订单服务不主动调用其他服务。

比如说,你想了解订单的用户详情、商品详情等等,这应该由上层应用通过调用相应的服务来实现,然后和订单信息组装在一起,而不是在订单服务内部直接调用其他服务,否则会导致基础服务之间相互依赖,职责模糊。

如果说这个信息整合的场景非常通用,我们可以创建一个在基础服务之上的聚合服务来实现,把订单信息、用户信息、商品信息整合在一起。

第二,订单服务不负责和第三方系统的集成。

在这里,订单需要在我们的订单服务和三方外卖平台,以及收银系统之间进行同步,这些同步功能都是针对第三方系统定制的,不具有通用性。而我们的订单服务作为基础服务,需要具备通用性,因此这些和外部系统对接的功能不会在订单服务的内部实现,而是由额外的同步程序实现。

小提示:这些同步程序可以主动调用订单服务,然后再和第三方对接,如果想实时获取订单信息的变化,同步程序可以订阅订单服务的消息通知,第一时间了解订单变化。

第三,订单服务不提供优惠计算或成本分摊逻辑。

订单服务不负责具体的优惠计算,只提供优惠结果的存储和查询,用于还原订单的费用组成。优惠的具体计算过程一般由专门的促销系统负责,成本的分摊一般由后续的财务系统负责。这个我们在上一讲中已经说过,这里就不详细解释了。

最后,该服务不提供履单详情,不负责详细物流信息的存储。

比如说,订单已经发送至上海、订单已经到达某某快递站等等这些信息,订单服务不负责提供这些详细信息,这些都是属于后续履单系统的职责。订单服务可以存储一些外部系统的单据号码,比如配送单号,这样能方便上层应用通过订单记录和配送系统进行关联,获取配送的详细信息。但订单服务只负责存储,不负责数据的进一步解释。

到这里,你可以看到,通过从正反两个方面说明订单服务的职责,我们就得到了一个边界很清晰、职责很聚焦的订单服务边界,所有人对它的职责认识是一致的,尽可能地避免了后续的争论。

订单服务内部设计

好,确定了这个订单服务要做什么之后,接下来,我们要解决的就是服务内部怎么做的问题了。

作为共享服务,我们要保证订单服务功能上的通用性,就需要同时对内部数据模型和外部接口进行良好的抽象设计。

1. 订单状态通用化

对于数据模型来说,订单要存储哪些信息,已经比较明确了,具体你可以看下这个图。

但对于如何管理订单的状态,情况就比较复杂了。

我们知道,如果针对一个具体的项目,无论它的订单状态有多么的复杂,我们都可以事先精确地定义出来。但不同的行业甚至不同的企业,他们对于订单状态管理都是不一样的,订单服务作为一个共享服务,它必须要满足不同项目的订单状态管理。所以对于如何解决这个问题,这里我有两个思路供你参考。

一个是开放订单状态定义。

在这里,订单服务事先不限定订单有哪些状态,每个项目都可以自己定义有哪些订单状态。服务的调用方可以在接口里传递任意的状态值;订单服务只负责保存状态数据,不负责解释具体的状态,也不负责任何的规则校验,它允许订单从一个状态转换为其他任意的状态。

这样的设计,在理论上可以满足各种状态的定义,满足各种状态之间的变化,但这样做其实有很大的问题。在这里,订单状态是完全由外部负责管理的,上层应用的负担会很重,不但要负责定义有哪些状态,而且还要维护状态的转换规则,一不小心,订单可能从状态 A 非法地变成状态 B,导致业务出问题。

另外一个是应用和服务共同管理状态。

对于订单状态管理,应用和服务各自承担一部分职责,我们看下具体如何实现。

我们知道,无论订单的状态变化是如何的复杂,我们总是可以定义一个订单有哪些基本的状态,包括这些基本状态之间是如何变化的。比如,订单一开始都是用户下单后待支付,支付完成后变成一个有效的订单,然后由商家进行接单,制作完成后进行发货配送等等,订单最终的状态要么是完成,要么是取消。

这些订单的基本状态,我们称之为“主状态”,它们由订单服务负责定义,包括这些主状态之间的转换规则,比如已完成的订单不能变为已取消的订单。主状态的数量是比较有限的,状态之间的变化关系也是比较明确的。

这个主状态,我们对大量现有的业务场景进行总结和抽象,是完全可以定义出来的。在这个订单服务例子里,我们定义了如下图所示的订单状态机,包括有哪些主状态,以及它们的转化关系。

订单除了“主状态”,还有“子状态”。

比如,一个订单处于配送中,实际情况可能是“仓库已发货”,“货已到配送站”,或者是“快递员正在送货中”等等,那么在这些情况中,订单的主状态都是“配送中”,它的子状态就是细化的这几种情况。子状态有哪些具体的取值,不同的项目是不一样的,这个就开放给各个应用来定义。

所以,订单服务数据模型里有两个字段,其中的主状态由订单服务负责管理,包括主状态之间的变化规则;而子状态由上层应用来定义,管理子状态的变化规则,比如一个配送中的订单,它的子状态可以由“仓库已发货”,变为“快递员正在送货中”。

现在,我们就可以总结下这两种订单状态的设计思路。

第一种方案,我们不对订单状态进行管理,而是把订单的状态作为一个简单的属性存储,只支持订单状态简单的增删改查功能。我们知道,订单状态是订单业务规则的核心体现,这样的订单服务是没有灵魂的,也失去了大部分业务复用的价值。

第二种方案,应用和服务共同管理订单的状态,订单服务抓大放小,通过主状态管理把控住了订单的核心业务规则,同时把子状态开放给应用进行管理,为具体的业务场景提供了灵活性。通过主状态和子状态的结合,订单服务就满足了不同行业、不同企业的订单状态管理需求。

2. 订单服务接口定义

说完了订单的状态管理,接下来,我们从调用方怎么使用服务的角度,来看下订单服务外部接口是如何设计的。

外部系统和服务的交互有两种方式,包括同步的服务接口调用和异步的消息通知。

首先是同步的服务接口调用。

为了方便外部调用方,我们在服务接口命名时,一定要规范和统一,接口名字要能够望文生义,方便调用者快速找到所需要的接口。并且,我们还要提供接口具体的请求和响应样例帮助说明。

具体的接口设计规范,我就不具体展开了,每个公司都要有明确的规范要求,这里我就说下常见的查询接口是如何设计的。

一个订单有很多字段,每次调用方要查询的信息可能都不相同,不同字段之间的组合方式有很多,我们不可能一一支持。

那么,我们怎么设计查询接口,来满足各种场景需求呢?一般来说,我们可以根据返回字段数量的不同,提供三个不同粒度的查询接口来满足多样化的需求。

第一个是粗粒度接口,只返回订单最基本的 7-8 个字段,比如订单编号、订单状态、订单金额、下单用户、下单时间等等;第二个是中粒度接口,返回订单比较常用的十几个字段;第三个是细粒度接口,返回订单的详细信息。

这样,不同的查询需求,就可以根据要返回信息的详细程度,来选择合适的接口,通过这种方式,我们兼顾了要定义的接口数量和查询的性能。

其次是异步的消息通知。

订单服务除了提供同步的接口调用,还针对每次订单信息的变化,提供异步的消息通知,感兴趣的外部系统可以通过接收消息,第一时间感知订单的变化。

按照消息详细程度的不同,订单消息可以分为“胖消息”和“瘦消息”。

顾名思义,胖消息包含了尽可能多的字段,但传输效率低;瘦消息只包含最基本的字段,传输效率高。如果外部系统需要更多的信息,它们可以通过进一步调用订单服务的接口来获取。

在这个订单服务的例子里,如果是订单状态的变化,我们只需提供订单号、变化前后的状态即可,因此主要以瘦消息为主;如果是新订单的创建,由于订单的字段比较多,所以使用胖消息,避免外部系统进一步调用订单服务接口。你在实践中,可以根据实际情况,在消息的数据量和消费者处理消息的复杂度之间做平衡。

前面我们说了,订单服务不会主动调用外部系统的接口,这里的异步消息通知,就可以很好地保证外部系统及时感知订单的任何变化,同时避免订单服务和外部系统直接耦合。

总结

要想打造一个可高度复用的共享服务,你需要掌握最核心的两点:清晰的边界划分、内部的抽象设计。

今天,我通过一个实际的订单服务例子,帮助你理解如何清晰地定义服务的边界,以及如何通过抽象设计保证服务的通用性。你在实践中,一定要深入分析业务场景,识别真正的挑战在哪里,避免设计的简单化或过度复杂化。

JAVA基础,微服务核心知识点整理 关于Java的核心知识点整理,包括了Java基础,框架,微服务,大数据,数据库等知识点;pdf,带详细目录 立即下载

相关推荐

yolov5深度剖析+源码debug级讲解系列(一) yolov5的架构和源码debug准备

前言 前段时间分析了yolov3的源码,这次想带着小伙伴一起把yolov5完全掌握。博主还是保持着一贯的风格,依旧采用debug级别的源码剖析。目的就是让大家可以通过一个系列的文章就把yolov5的架构、设计理念和每一行源码都弄懂。只要小伙伴可以花时间把这个系列读完,就会对yolov5的理解有所提升。 去年参加了kaggle的小麦检测比赛,yolov5在比赛的中段开始呈现霸榜趋势,超越了efficientdet。虽然最后yolov5因为权限等某些问题被kaggle官方禁用了,但是仍然体现出了其强大的能力。值

人唯优的博客 4万+

“一学就会”微服务的架构模式,终局之战

如果我们切分不够细,那么可能的结果就会变为,从一个很大的系统被切分为了寥寥几个也很大的系统,最终没有解决问题不说,还可能因为系统变成了不同的分布式服务,又引入了新的分布式系统本身所带来的问题。无论一个系统有多大,如果我们将其拆的足够小,就可以把一个复杂的大系统拆分成许多个小系统,再让这分解出来的小系统通过对外提供服务的手段,将他们再聚合成一套大的完整体系,从结果上,就等价为了原来的复杂的大系统了。比如,系统的订单模块,个人下单可能会被频频访问,此时,就需要系统的集群多一些,去处理这些大规模的访问。

m0_60707660的博客 1203

告别环境配置焦虑:在Win10的Ubuntu子系统里搞定CSAPP实验环境(附32/64位库编译指南)

本文详细介绍了如何在Win10的Ubuntu子系统中搭建CSAPP实验环境,包括WSL 2的安装与配置、32/64位库的编译指南以及高效开发工具链的设置。通过优化WSL性能和使用实用技巧,开发者可以轻松应对CSAPP实验中的环境配置问题,提升学习效率。

weixin_30443813的博客 296

使用java实现用户的基础功能

实现用户登录等基础功能

m0_63930574的博客 510

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

驱动兼容_FANUC 驱动器兼容问题探讨

近10年来,FANUC伺服驱动器随着系统的升级而升级,不同的系统,可以兼容很多种类的驱动器,作者做了一些常见经验总结如下表:电源模块伺服放大器主轴放大器bi一体18i/OIB/OIC6110-Hxxx6114-Hxxx6111-Hxxx6134-Hxxx31iA/OID6140-Hxxx6117-Hxxx6141-Hxxx6164-Hxxx31IB/35IB/OIF/OI MATE D(5包)62...

weixin_34420941的博客 1751

java 服务设计_Java 后台服务程序设计

在许多大型软件项目中,后台服务程序都扮演着极为重要的角色。它们无处不在,例如操作系统的内核程序处理各种对操作系统的内部调用;数据库系统的核心管理进程处理各种对数据库的读写操作和进程、资源的管理;大型 ERP 软件的内核管理程序要完成各种应用模块的资源、通讯管理等等。它们使系统的各种服务、资源与应用的表示之间形成了一个松耦合关系,这样就极大地增加了软件系统的稳定性和伸缩性。后台服务程序也就是相当于软...

weixin_36050671的博客 386

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 320

Java程序设计基础(修改)

Java程序设计基础 Java最早是由SUN公司(2009年4月被Oracle收购)的James Gosling(詹姆斯·高斯林Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,在1995年以Java的名称正式发布,1995年5月23日Java语言诞生。 1999年6月Java又分出了三个不同版本: Java SE:Standard Edition Java EE:Enterprise Edition Java ME:Micro Edition Java SE就是标.

cnds123的专栏 2238

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2583

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断数据等,用以评估Dflash空间是否够用。本文基于ETAS软件介绍NVBlock配置生成NVM参数及使用。使用NVBlock配置生成,基本不用手写代码,还是比较方便的。对于Nv block的划分,建议将同时写的一类数据放到一个block中,因为block除了data以外,Fee还会增加一些header数据,占用不少内存。

赞的博客 1884

感觉自己不会的东西太多了,不知道如何下手?

GitHub 8.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 8.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 8.8k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 如果让我统计下,粉丝问我做多的问题是什么,这个问题肯定可以排前5,问出这个问题的朋友们遍布各个年龄段。 实话说,这个问题同样也困扰过我,大概就是我刚...

HollisChuang's Blog 5万+

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

不懂什么是高并发?看完这篇文章你可以去吊打面试官了

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类:1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?

jjc4261的博客 5920

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

不懂微服务?那是因为你没认真看完这篇文章

目录如下: 一、微服务架构介绍 二、出现和发展 三、传统开发模式和微服务的区别 四、微服务的具体特征 五、SOA和微服务的区别 六、如何具体实践微服务 七、常见的微服务设计模式和应用 八、微服务的优点和缺点 九、思考:意识的转变 十、参考资料和推荐阅读 一、微服务架构介绍 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各...

技术zhai的博客 1183

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

看完这篇文章,还不懂nginx,算我输

看完这篇文章,还不懂nginx,算我输 参考:https://mp.weixin.qq.com/s/PeNWaCDf_6gp2fCQa0Gvng 1. Nginx产生~ Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Lo...

hongjie_lin 485

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【云原生】你还不懂云原生?看完你就清楚了

最近几年,云原生概念与技术持续升温,已发展成为互联网行业关注的重点之一。 云原生产业的发展延续强劲态势,其概念得到了社区、企业和市场的广泛认可,在互联网、金融等领域有了许多实践的案例,越来越多的企业愿意将架构朝云原生演进。 如今,云原生正以强劲的发展之势,剑指云计算的下一个十年。............

翼同学 1451

不会还有人不知道中间件是啥吧?

不会还有人不知道中间件是啥吧?引言一. 中间件是什么?二. 中间件能干啥?2.1 中间件在应用开发中担任的角色三. 中间件特点四. 中间件的分类 引言 中间件(middleware)一词每天都被不同的人群所提及,中间件的产品也大量出现在软件市场,但中间件的定义却一直比较模糊,导致中间件的分类也不很统一。也许正因为如此,才使人们不断地设计和开发新的产品,并冠以中间件的标签,推动着中间件的内涵和市场不断地向前发展。 相信大家看这篇文章的初心就是单纯想了解一下 中间件是啥?能干啥?我为什么要学它?公司中为啥要

福尔摩东的博客 2万+

不懂什么是云原生?看完这篇文章就够了!

“云原生”,很多人会对这个新名词感到困惑,到底什么是云原生,云原生又能给我们带来什么呢?其实云原生的概念最早是由来自Pivotal的MattStine于2013年首次提出,这是他根据自身多年的架构和咨询经验总结出来的一个思想集合,得到了开源社区的不断完善,并被一直延续使用至今。 一、什么是云原生 那么到底什么是“云原生”呢?我们试图先从字面意思理解“云(Cloud)”和“原生(Native)”。 “云(Cloud)”这个字面意识不难理解简单的看就是天空中漂浮的一朵云,那么这个“云”放在科技环境下由从指

a958014226的博客 966

总是听说Python却不知道是什么?看完这篇文章就明白了

导读 此文章的内容主要介绍Python是什么,以及了解Python能做什么,希望能给读者深入浅出的介绍一下Python,先通过了解建立初印象,再深入学习编程。 本文通过以下几个部分对Python进行介绍: Python背景知识 Python是什么? Python能做什么? Python的特点? 我适合学Python吗? 做为未接触过Python的你,在看见Python这个单词的时候,是否会在脑海中浮现上面这些疑问? 希望通过本篇文章,能解答

sj4568的博客 1万+

知道什么是高并发吗?不懂就看!——看完这篇文章面试官过来被你吊打!!

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。 在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类: 1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等关键

weixin_45129876的博客 537

微服务架构到底是什么?看完这篇文章你就知道了

要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。 欢迎各位进群973961276一起聊聊技术吹吹牛,每周都会有几次抽奖送专业书籍的活动哦! 最初的需求 几年前,小明和小皮一起创业做网上超市。小明负责程序开发,小皮负责其他事宜。当时互联网还不发达,网上超市还是蓝海。只要功能实现了就能随便赚钱。所以他们的需求很简单,只需要一个网站挂

linuxguitu的博客 442

【微服务-Nacos】看完这篇文章,Nacos集群部署还不会吗?

前面我们介绍了Nacos单机部署和微服务接入Nacos注册中心的操作步骤,但单机部署是分布式应用的大忌,在分布式架构中,任何单点都可能成为系统的瓶颈。因此关于Nacos部署,通常都是采用集群部署来为系统带来高可用性。这里我们来介绍下Nacos的集群部署。

我爱娃哈哈的专栏 1788
上一篇: 这可能是把MyBatis缓存特性讲的最清楚的一篇文章了
下一篇: 如何学习源码?阿里架构师教你一招攻破源码难关
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值