当前位置:首页 > 数码 > 你自称懂架构-架构设计的真谛!-来这里看看 (架构怎么理解)

你自称懂架构-架构设计的真谛!-来这里看看 (架构怎么理解)

admin7个月前 (04-14)数码32

1. 引言

抢红包已经成为春节期间不可或缺的娱乐活动,自2015年微信推出红包功能以来,每年参与抢红包的用户数和红包发放量都呈爆发式增长。微信红包系统的背后蕴含着怎样的技术架构和设计理念,一直是开发者津津乐道的话题。

2. 概要设计

2.1 系统特点

微信抢红包系统具有以下特点:

  • 高并发:同一时刻有大量用户参与抢红包,系统需要承载海量的并发请求。
  • 安全性:红包涉及资金交易,必须确保系统安全性,防止超卖或少卖的情况发生。
  • 严格事务:抢红包的过程涉及多个操作,需要保证事务一致性,防止脏数据产生。

2.2 难点

与秒杀系统相比,微信抢红包系统的设计更加复杂,需要重点考虑以下难点:

  • 海量并发:红包活动的用户量巨大,并发请求远超普通秒杀活动。
  • 安全性要求高:红包业务涉及资金,不能出现超卖或少卖的情况,安全性要求比一般秒杀活动更高。
  • 事务一致性:参与抢红包的用户越多,并发DB请求越大,数据越容易出现事务问题,需要保证事务一致性。

3. 概要架构

3.1 功能说明

抢红包功能允许用户在群聊中发送任意个数和金额的红包,群成员可以抢到随机金额的红包,但保证每个用户的红包金额不小于0.01元。

3.2 数据库设计

红包系统涉及两个关键表:

  1. 红包表:记录用户发的红包数量和剩余金额。
  2. 红包记录表:记录用户具体抢到的红包信息,是红包表的主子表。

3.3 发红包

发红包流程如下:

  1. 用户输入红包金额和数量。
  2. 系统创建红包记录,记录红包金额和数量。
  3. 系统生成红包链接,发送给群成员。

3.4 抢红包

抢红包流程如下:

  1. 用户点击红包链接。
  2. 系统生成抢红包请求,发送给服务器。
  3. 服务器验证红包是否有效。
  4. 服务器计算用户抢到的红包金额。
  5. 服务器更新红包记录,扣除用户抢到的金额。
  6. 服务器返回抢到的红包金额给用户。

4. 详细设计

4.1 高并发解决方案

针对高并发问题,微信红包系统采用了以下方案:

架构怎么理解
  • 缓存:在数据库落盘之前加一层缓存,减轻系统压力,提升响应速度。
  • 加锁:在进行数据库更新操作时,使用悲观锁对数据进行加锁,防止并发写入导致数据不一致。
  • 异步分治:将红包发放任务分解成多个子任务,并行执行,提高系统吞吐量。

4.2 红包分配算法

微信红包系统采用概率分配算法来决定每个用户抢到的红包金额。算法原理如下:

  1. 将红包金额随机分成若干份,每份的金额范围是[0.01元, 红包总金额]。
  2. 用户抢红包时,随机生成一个[0, 1]之间的数字,表示用户抢到每一份金额的概率。
  3. 系统根据用户生成的概率,计算用户抢到的红包金额。

这种算法保证了每个用户的红包金额不小于0.01元,并且红包金额的分布相对均匀,防止用户抢到较少金额的红包而产生不满情绪。

5. 总结

微信红包系统是一个高并发、高安全、高可用性的复杂系统,其技术架构和设计理念值得开发者学习。通过对系统原理的深入理解,开发者可以设计出更稳定、高效的应用。


一张图讲清楚产品架构,手把手教你画产品框架图

什么是产品架构图 产品架构图是产品经理用来表达自己产品设计机制的一张概念图: 它将可视化的具象产品功能,抽象成信息化、模块化、层次清晰的架构,并通过不同分层的交互关系、功能模块的组合、数据和信息的流转,来传递产品的业务流程、商业模式和设计思路。 由于产品架构图通常用于比较复杂的产品项目中,目前介绍产品架构图的相关书籍和资料极少(尤其是入门级别的资料很少提及),却是设计复杂产品时不可或缺的文档之一。 没有资料的探索过程漫长且没有方向,在终于有所沉淀后,我花了四周写下了这篇总结,希望可以为你绘制产品框架图时提供简明的参考。 为什么要画 梳理自己对产品方向的判断: 思考这张图如何设计的过程,也是帮助你梳理“半年内自己的产品该往何处去、需求应该如何分期和落地、和其他产品的依赖&竞争关系是什么、未来的可拓展性在哪里”等问题的过程。 为技术&运营的输出形成支撑: 当这张图被设计出来后,按照产品架构图的结构和路径,项目的里程碑(RoadMap)就可以被清晰的拆解出来,同时项目成员也可以根据这张架构图产出运营计划、技术系统架构方案等强依赖产品方向的方案。 让他人可视化的理解你的产品架构: 能较为清晰简单的呈现自己的思路、明确自己的产品边界、指明发展的方向,常用于在项目规划或项目总结中进行展示,帮助不了解你的产品的人快速的建立对你的产品结构、功能、复杂度的认知。 何时需要画 建议在复杂项目开始前写: 当你要开始设计一个系统性、完整的需求时,如果跳过画产品架构图的步骤,直接开始画原型、写PRD、kick off,就很容易发生“改了又改”、“做了一版需求然后又推翻”的情况。 但“种一棵树最好的时间是十年前,其次是现在”: 如果你的项目已经进行到一半,自己却从未产出过这张图,那么就从此刻开始,按照下文的步骤尝试为自己的产品产出一张产品架构图吧。 如何画 之前我们分享了【AR最全干货及资料】设计AR产品,你一定要看的总结,你可能对AR相关的背景知识已经有所了解。 为了分享的延续性,我们来做一个大胆的假设*: 假设你是 微信-扫码功能 的产品经理,有一天老板把你叫到办公室,一番鼓励后拍着你的肩对你说: “苹果发布会看了没?苹果这么重视对AR能力的支持,我们微信也要赶紧把AR功能做起来。 这是个Allen(张小龙)很重视的项目,你回去好好设计一下,明天来跟我过方案。 记住,要能够一炮打响,全民参与喔!” 啊,张小龙级别的项目啊!明天就要出方案,怎么办 ? 画前准备 列出问题域 在需求初期,产品经理得到的往往只是一句比较模糊的需求描述,它们可能来自于老板、运营或用户。 直接把这句话作为核心产品功能是不恰当的,合理的做法是先把这个产品所有的问题域列清楚。 “问题域”是指自己的产品能够解决的所有问题的空间集合。 从核心需求出发,将所有当前需要解决、未来可能要解决的问题放入产品框架的范围,能够帮助你的产品架构图拥有更高的可拓展性,在后续具备迭代和优化的空间。 以微信AR的需求为例,问题域是这样一个集合: 详细操作步骤: 1. 找到收到的需求中,跟产品形态、产品目标相关的词句,去列出“XX的流程会是什么样”、“XX该怎么达成”之类的问题,直到如果这些问题解决,能够实现核心需求的方向和业务目标。 2. 去逐次寻找这些问题需求被解决的过程中,是否有其他要先解决掉的问题、或者其他跟业务相关的问题能够被解决/改善。 3. 按照层级去罗列出所有的问题,并附上自己的初步回答,从而形成一个初步的、自己的产品能够解决的“问题域”。 确定产品方向 在经过问题域的罗列后,你应该能够得到一个模糊的产品方向和功能范围。 把这些问题域的答案抽象总结成一个确定的产品需求。 以微信AR的需求为例,根据问题域,我们发现需求不只是扫码组件增加AR识别能力这么简单,整个需求里需要引入广告主的角色,并且需要和广点通、腾讯开放平台等团队合作。 最终得到的产品方向描述是这样的: 详细操作步骤: 问题域的环节非常发散,这一步需要回归基础,把模糊的需求补充、拓展和翻译成一个在商业模式和用户体验上能够形成闭环的产品需求。 1. 核心需求确定:我的产品核心解决的是哪批用户、哪个用户需求? 2. 产品目标:如果以一个数字指标衡量我的产品,它应该是什么? 3.用户场景:核心需求基本的产品形态、用户使用的路径是怎样的? 清晰的业务流程 这一步需要根据核心产品需求和问题域的答案,画出简单的业务流程。 业务流程是产品设计中常见的图表,绘制方法就不再多做说明。 以微信AR的需求为例,从广告主准备AR互动,到用户在前台使用摄像头参与互动,整个业务流程如下: 着手绘制 搭建基础框架 基础的产品框架脱胎于业务流程,但相比业务流程,更加注重产品功能的枚举、功能模块之间的分界。 详细操作步骤: 1. 对照业务流程,根据自己设想的产品机制、基本产品形态和用户的使用路径,列出需要的页面&功能&模块等前后端逻辑。 2.将刚刚得到的多个流程图中所有功能类似或者范围有包含关系的机制/功能放在一起,以模块化的形式形成一张简单的矩阵图。 3. 将明显是同一个产品范围、同一组产品功能的模块放在同一层级,得到一个基础的产品框架。 明确架构分层 一个具备前后台关系的产品架构图至少分为三层:用户感知层(在何种场景下通过何种方式触达用户)、功能模块层(通过哪些功能模块实现产品的核心功能、和哪些外部平台功能有信息交互)、数据层(产品的数据从哪里来、产品的数据沉淀到何处去)。 在上一步进行简单分层后,我们已经得到一个初步框架,但是难免会有分层不明确的问题。 此时需要按照两种维度来处理架构图的层级:不同信息层级的边界、同一层级内模块和模块的边界。 1.处理不同信息层级的边界: 架构图的层级表达的其实是信息之间的流转关系,不同信息层级之间一定是有逻辑关系的。 其中用户感知层和数据层通常可以简化为一层(用户端的功能表达往往逻辑简单、数据的来源问题则不是自己产品的核心功能),而功能模块层则需要按照自己产品的逻辑去将功能模块层内的主要模块变成新的层级。 2.处理同一层级内子模块的边界: 各层次之间虽然相关,但同一层次内的子模块之间一定是互相独立、界限分明的(常常对应着不同的开发团队和系统应用)。 将解决不同问题的功能拆分成两个子模块,做到一个问题只在同一层解决,避免牵一发而动全身的情况出现。 3. 明确产品间的边界: 产品边界对于开发设计系统架构、业务间的合作模式都非常重要。 用不同颜色标识清楚产品框架中,各个部分所属产品的边界,通常其中属于自己团队的部分用亮色表示。 加入信息流转机制 产品架构图在表达产品的核心功能外,也应该体现信息流动的路径:当前层级数据的交互形成产品功能,产品功能又产生新的数据,从而推动下一层级的功能运转起来。 如果当前产品的主要使用角色只有一个,则只需要用箭头标明模块间信息流动的方式即可。 如果当前产品会涉及的主要角色比较多,则需要用不同颜色的线条将他们和各个模块之间的信息交互关系外化出来。 最终检查 一张好的产品架构图,应该具备以下特点。 清晰的模块功能边界 功能经过抽象,做到标准化、互相独立 上下游产品功能边界清晰,架构分层明确合理 具备迭代优化的能力 记得不断根据你的产品的发展情况来更新产品架构图,每次修改的过程对提升产品架构能力的帮助非常巨大。 ———————————————— 原文地址:

股权架构的类型和设计思路(干货)

股权顾问 刘星宇

夜阑卧听风吹雨,铁马冰河入梦来

一、股权架构设计的作用 股权架构设计的作用,是为了明确合伙人的权,责,利,帮助创业公司的稳定发展,方便创业企业融资。另外,股权结构既是影响公司的控制权的一大因素,还是企业进入资本市场的必要条件。所以说,在创业企业股权结构这一表象背后,暗藏着,或者说反映了创业企业生存、发展所需对接的各种资源,诸如团队、技术、资本、渠道等。因此,股权架构的设计,也就是要考虑如何找到企业发展所需的资源,并且将这些资源合理的拼接利用起来,实现企业和各利益相关者之间的共赢局面。 二、什么是股权架构 股权结构是指股份公司总股本中,不同性质的股份所占的比例及其相互关系。股权即股票持有者所具有的与其拥有的股票比例相应的权益及承担一定责任的权力。基于股东地位而可对公司主张的权利,是股权。股权结构是公司治理结构的基础,公司治理结构则是股权结构的具体运行形式。不同的股权结构决定了不同的企业组织结构,从而决定了不同的企业治理结构,最终决定了企业的行为和绩效。股权结构的形成决定了企业的类型。股权结构中资本、自然资源、技术和知识、市场、管理经验等所占的比重受到科学技术发展和经济全球化的冲击。随着全球网络的形成和新型企业的出现,技术和知识在企业股权结构中所占的比重越来越大。社会的发展最终会由“资本雇佣劳动”走向“劳动雇佣资本”。人力资本在企业中以其独特的身份享有经营成果,与资本拥有者共享剩余索取权。这就是科技力量的巨大威力,它使知识资本成为决定企业命运的最重要的资本。最后,股权结构是可以变动的,但是变动的内在动力是科学技术的发展和生产方式的变化,选择好适合企业发展的股权结构对企业来说具有深远意义。 三、股权架构的类型 (1)一元股权架构

一元股权架构这种是指股权的股权比例、表决权(投票权)、分红权均一体化。在这种结构下,所有中小股东的权利都是根据股权比例而决定的。这是最简单的股权结构,需要重点避免的就是公司僵局的问题!实际中存在几个表决权“节点”:1是一方股东持有出资比例达到33.4%以上的;2是只有两位股东且双方出资比例分别为51%和49%的;3是一方出资比例超过66.7%的;4是有两股东且各方出资比例均为50%的。在这里,第三种出资比例意味着,公司在任何情形下都不会形成僵局,因为表决权比例已经高达“三分之二”以上,对任何表决事项都可以单方形成有效的公司决议,除非公司章程对股东须“同意”的人数作出最低限制。最为糟糕的是第四种股权结构,在两股东各占50%表决权的机制下,意味着公司作出任何决议均必须由双方一致同意方可有效。 (2)二元股权架构

二元股权架构是指股权在股权比例、表决权(投票权)、分红权之间做出不等比例的安排,将股东权利进行分离设计。我国的公司法修订后规定,章程可以约定同股不同权,当然,在股份公司下,只有不同类别的股东才能这样设计,同一类股票的权利应该是一致的。这种架构设计,适合那些,需要将分红权给某些合伙人,但将决策权给创始人的多个联合创始人的情况。这种股权架构在 国外非常普遍,例如Facebook在IPO时的招股书中,已明确将股权分为A、B股,扎克伯格通过大量持有具有高表决权的B类股来维系对公司的掌控; (3)4×4股权架构

4X4股权架构 这就是在二元股权架构的基础上,将公司的股东分为四个类型,创始人、合伙人、员工、投资人,针对他们的权利进行整体性安排,以实现前面提到的五大目标。这个名词,是一个比喻,大部分人应该知道4X4是啥意思,当然不是等于16,这里是指汽车的四驱。比如可以把每一个创业公司好比是一辆车,大家创业从事的行业就是赛道,创始人就是赛手。创业创新,本质上是一场比赛,不管是越野赛还是F1,创业者作为赛手,必须要好的赛车,而且必须是四驱的,那样动力足,克服困难阻力能力强。但是,现实中,很多创业公司还是一辆自行车,或辆三轮摩托车。四类这样的股东构成了4X4架构,但只有架构还不行,比如说,你有四个轮儿,不过还是辆QQ。 4X4股权架构设计的思路主要有三大步骤: 第一步 :将公司股权这一大蛋糕首先分出投资人和创始人的份额; 第二步 :考虑将剩余的蛋糕分给合伙人和员工,并且在合伙人和员工这两部分蛋糕中,再根据个人对公司的贡献细分每个人应得的股份; 第三步 :查漏补缺,看按照前两步分得的股权是否有不合理之处,进行调整。 四、4X4 股权架构设计着重分析 由于国内比较流行的股权架构设计是:4X4股权架构设计,所以下面着重介绍一下:4X4 股权架构设计(1)在进行股权设计的时候,先考虑一下下这些问题(也就是说在切蛋糕之前先考虑一下以下的问题)我们企业属于什么类型的企业?(人力驱动型、资金驱动型、资源驱动型等)对于企业的发展来说,最核心的资源是什么?(注:企业所需要的资源可以分为:①资金②关系,包括可以为企业提供客户群、投资者、合作伙伴、或顾问等人脉关系③知识产权 ④企业所需的基础设施比如:办公楼、工作室、设备厂房等 ⑤ 人力资源 ⑥想法、创意谁能提供企业所需的这些资源?企业目前所掌握的资源有哪些?日后发展所需要的资源又有哪些?在所有的资源中哪些是企业长期所需要的,哪些又是一次性所满足企业所发展所需要的如何才能确保企业拥有所需要的资源

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 架构

“你自称懂架构-架构设计的真谛!-来这里看看 (架构怎么理解)” 的相关文章

从零开始打造新系统架构的完整指南 (从零开始打造不朽仙域免费)

从零开始打造新系统架构的完整指南 (从零开始打造不朽仙域免费)

架构设计是一个多维度的过程,包括工程架构、业务架构和部署架构等。一个好的系统架构标准应该具备可扩展性、可维护性、可靠性、安全性、高性能等特点。本文主要围绕工程架构设计展开探讨。 二、价值为先...

释放CPU与内存性能桎梏的终极解决方案-NUMA架构 (释放cpu性能)

释放CPU与内存性能桎梏的终极解决方案-NUMA架构 (释放cpu性能)

简介 NUMA(Non-Uniform Memory Access)是一种计算机架构,其中每个处理核心或处理器都拥有自己的本地内存。与统一内存访问(UMA)架构不同,在 UMA 架构中,所有...

微服务架构监控的原则 (微服务架构监控)

微服务架构监控的原则 (微服务架构监控)

微服务环境中的监控系统:变革与指导原则 引言 微服务架构的兴起彻底改变了软件开发,带来了速度和灵活性。随之而来,监控系统作为微服务控制系统的核心组成部分,也面临着全面的改造需求,以适应微服务环境...

微服务架构中的不可或缺的服务治理工具-Eureka (微服务架构中如何处理服务间的通信)

微服务架构中的不可或缺的服务治理工具-Eureka (微服务架构中如何处理服务间的通信)

引言 Eureka是Netflix OSS(开源软件)项目的一部分,它是一个用于实现微服务架构中的服务注册和发现的开源工具。在当今庞大且复杂的微服务系统中,Eureka扮演着至关重要的角色,帮助...

掌控复杂性-创造灵活可扩展的系统-六边形架构 (复杂事物掌控力)

掌控复杂性-创造灵活可扩展的系统-六边形架构 (复杂事物掌控力)

六边形架构是一种架构模式,将外部系统与核心应用程序分隔开来。它的思想很简单:从一个六边形开始,然后应用端口和适配器。 六边形架构的六个边 六边形有六个边,但六边形的形状本身并没有特别含...

六种最关键的架构模式 (六种最关键的职业)

六种最关键的架构模式 (六种最关键的职业)

架构模式:六种常见且关键的模式 引言 在软件开发中,架构模式是一种经过验证的解决方案,可以帮助解决常见的开发问题。这些模式提供了重用性的设计方案,允许开发人员创建可维护、可扩展和易于测试的应用程序...

架构中的低成本约束 (架构中的低成本是指)

架构中的低成本约束 (架构中的低成本是指)

低成本架构:创新与挑战的平衡 引言 在架构设计过程中,成本通常被视为一项重要约束或非功能目标。与高并发、高性能、高可用和安全性等其他非功能目标类似,低成本贯穿整个架构设计流程。本文探讨了实现低成...

最佳实践和挑战-平台工程团队的架构和设计注意事项 (最佳实践的定义)

最佳实践和挑战-平台工程团队的架构和设计注意事项 (最佳实践的定义)

什么是平台工程? 平台工程是一种构建、维护和管理服务和工具的实践,这些服务和工具可供组织中的其他团队使用。平台工程团队创建标准化、可重用的组件,以便其他团队可以专注于构建应用程序和产品,而...