《微服务设计原则》
文章平均质量分 88
介绍微服务高可用、高性能、易维护、低风险的设计原则。
恋喵大鲤鱼
一条不止于编码的鱼。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
微服务设计原则——功能设计
大的数据库事务,会造成其他客户端对数据库连接的请求获取不到,那么和这个数据库相关的所有服务都有可能处于等待状态,造成数据库连接池被打满,多个服务直接宕掉。【强制】在实现涉及数字精度处理的业务逻辑前,必须与需求方(如产品经理)确认需求的详细描述和业务背景,确保精度设计符合业务需求。在分布式系统中,生成全局唯一ID是非常重要的需求,因为需要确保不同节点、服务或实例在并发操作时不会生成相同的ID。【建议】合理的舍入策略,比如四舍五入:在进行浮点数计算时,可以使用四舍五入来减少累积误差。原创 2024-12-19 21:03:31 · 1077 阅读 · 0 评论 -
微服务设计原则——高性能:分页
对于查询 API 来说,当查询结果集包含成千上万条记录时,返回所有结果是一个挑战,它给服务器、客户端和网络带来了不必要的压力,于是便有了分页接口。在设计分页接口时,页大小需要设置上限。这是因为如果没有上限,客户端可以请求任意大的页大小,从而可能导致服务器性能问题,例如一次请求返回过多数据,导致服务器响应变慢,网络传输时间变长,甚至可能引起系统崩溃等问题。为了防止这种情况的发生,通常会在设计分页接口时设置一个最大页大小限制。原创 2024-08-24 15:47:43 · 491 阅读 · 0 评论 -
微服务设计原则——高性能:批量
假设一个用户一次传 1w 个id进来,那么接口可能需要很长的时间才能处理完,这往往会导致超时,用户怎么调用结果都是超时异常,那怎么办?限制长度,比如限制长度为 100,即每次最多只能传 100 个id,这样就能避免长时间执行,如果用户传的 id 列表长度超过 100 就报异常。接口,那么使用方如果要一次性获取 20 个数据,它就需要循环遍历调用我们接口 20 次,不仅使用方性能很差,也无端增加了我们服务的压力,这时提供一个批量拉取的接口。对于批量接口,我们也要注意接口的吞吐能力,避免长时间执行。原创 2024-08-18 19:51:48 · 879 阅读 · 0 评论 -
微服务设计原则——高性能:零拷贝
在微服务架构中,零拷贝技术能够显著提升性能,尤其是在数据传输和处理方面。通过减少内存中的数据复制操作,零拷贝能够提高系统的吞吐量、减少延迟和降低资源消耗。原创 2024-08-18 19:28:36 · 921 阅读 · 0 评论 -
微服务设计原则——高性能:存储设计
任何一个系统,从单机到分布式,从前端到后台,功能和逻辑各不相同,但干的只有两件事:读和写。而每个系统的业务特性可能都不一样,有的侧重读、有的侧重写,有的两者兼备,本节主要探讨在不同业务场景下存储读写的一些方法论。原创 2024-08-18 19:06:38 · 1587 阅读 · 0 评论 -
微服务设计原则——高性能:池化
惰性初始化是真正有需要的时候再去创建,这种方式可能有助于减少资源占用,但是如果面对突发的任务请求,然后瞬间去创建一堆连接,可能会造成系统响应慢或者响应失败,通常我们会采用启动即初始化的方式。每次都在请求中去创建这些资源,会增加处理耗时,但是如果我们用一个 容器(池) 把它们保存起来,下次需要的时候,直接拿出来使用,避免重复创建和销毁浪费的时间。对于分类,可以分为核心和非核心,核心线程池一直存在不会被回收,非核心可能对空闲一段时间后的线程进行回收,从而节省系统资源,等需要时在按需创建放入池子中。原创 2024-08-18 18:55:33 · 1605 阅读 · 0 评论 -
微服务设计原则——高性能:异步与并发
比如腾讯的移动连通服务维纳斯(WNS,Wireless Network Service)的跑马模块其实就是这种机制,跑马模块为了快速建立长连接同时向后台多个 IP/Port 发起请求,谁快就用谁,这在弱网的移动设备上特别有用,如果使用等待超时再重试的机制,无疑将大大增加用户的等待时间。异步(Asynchronous)是一种编程模型或执行方式,在这种方式中,任务的启动和完成不是同步的,也就是说,程序不会在等待任务完成时阻塞,而是可以继续执行其他操作。在微服务架构中,异步处理可以显著提高系统的性能和扩展性。原创 2024-08-18 18:03:22 · 1828 阅读 · 0 评论 -
微服务设计原则——易维护
不是随便一个功能就要有个接口。虽然一个接口应该只专注一件事,但并不是每一个功能都要新建一个接口。要有充分的理由和考虑,即这个接口的存在是十分有意义和价值的。无意义的接口不仅浪费开发人力,更增加了服务的维护难度,服务将会十分臃肿。相关功能我们应该考虑合为一个接口来实现。原创 2024-08-04 10:18:02 · 998 阅读 · 0 评论 -
微服务设计原则——高性能:锁
上图的模式可以改成串行无锁的形式,当 MainReactor accept 一个新连接之后从众多的 SubReactor 选取一个进行注册,通过创建一个 Queue 与 I/O 线程进行绑定,此后该连接的读写都在同一个队列和线程中执行,无需对队列加锁。可以预见的是,随着分片粒度地变小,性能差距会越来越大。利用硬件支持的原子操作可以实现无锁的数据结构,很多语言都提供CAS原子操作(如 Go 中的 atomic 包和 C++11 中的 atomic 库),可以用于实现无锁数据结构,如无锁链表。原创 2024-07-17 21:26:55 · 1118 阅读 · 0 评论 -
微服务设计原则——低风险
XSS(Cross Site Scripting)名为跨站脚本攻击,因其缩写会与层叠样式表(Cascading Style Sheets,CSS)混淆,故将其缩写为 XSS。XSS 漏洞是 Web 安全中最为常见的漏洞,通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页中,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java、 VBScript、ActiveX、 Flash,甚至是普通的 HTML。原创 2024-03-26 12:57:29 · 1687 阅读 · 1 评论 -
微服务设计原则——高可用
,这些都是糟糕的建议。如果第三方接口响应时间都是 50ms 左右,那么线程都能很快处理完自己手中的活,并接着处理下一个请求,但不幸的是如果有一定比例的第三方接口响应时间为 2s,那么最后这 50 个线程都将被拖住,队列将会堆积大量请求,从而拖垮整服务。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果时网络异常(超时成功),此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。原创 2024-03-24 00:48:15 · 2115 阅读 · 0 评论 -
微服务设计原则
微服务是一种系统架构风格,是 SOA(面向服务架构)的一种实践。微服务架构通过业务拆分实现服务组件化,通过组件组合快速开发系统,业务单一的服务组件又可以独立部署,使得整个系统变得清晰灵活:一个大型复杂的软件应用,都可以拆分成多个微服务。各个微服务可被独立部署,各个微服务之间是松耦合的。所以现如今后台服务大部分以微服务的形式存在,每个微服务负责实现应用的一个功能模块。而微服务是由一个个接口组成,每个接口实现某个功能模块下的子功能。以一个 IM 应用为例,它的功能架构可能是下面这样的。所以如果是后台开发的同学原创 2021-04-12 20:53:53 · 3704 阅读 · 4 评论 -
微服务设计原则——高性能:缓存
(2)布隆过滤器:采用布隆过滤器将,将所有可能存在的数据哈希到一个足够大的 Bitmap 中,一个一定不存在的数据会被这个 Bitmap 拦截掉,从而避免了对底层数据库的查询压力。“劲酒虽好,不要贪杯”,使用缓存的目的是为了提高性价比,而不是一上来就为了所谓的提高性能不计成本的使用缓存,而是要看场景。缓存的数据集中在一台机器上,如共享内存。Size-based Eviction 策略通常适用于对缓存空间有严格限制的场景,可以根据缓存空间的大小和数据的大小来灵活选择要淘汰的项目,以实现最佳的缓存效果。原创 2024-03-13 18:27:58 · 2013 阅读 · 0 评论
分享