首页  ·  知识 ·  架构设计
架构设计的基本思路
胡拉哥  生活研究生  综合  编辑:一个人一座城一段  图片来源:网络
做架构就是做抽象,要把复杂的事情搞简单,千万别把简单的事情搞复杂。问题越复杂,架构越重要。所以做架构是为了解决复杂的问题。

做架构就是做抽象,要把复杂的事情搞简单,千万别把简单的事情搞复杂。问题越复杂,架构越重要。所以做架构是为了解决复杂的问题。

下面从一个具体问题出发,分享架构设计的基本思路。由于本人的经验和能力有限,难免有不足或错误,欢迎读者指出问题并一起探讨。

接下来的内容,我们先介绍业务背景,然后思考如何设计一套技术系统,来支持业务的发展。

业务背景

这是一家零售公司,基本的业务逻辑就是进货和卖货。说得好听一点,包含三个要素:商品、销售渠道和供应链。

商品

商品的种类多样,包括居家、服配、快消、数码、运动等。商品的品牌多样,包括自营品牌和第三方品牌。

商品要做研发,比如选品,决定原材料和供应商(工厂);设计商品和包装;研发生产工艺和流程,以及质量保障。

销售渠道

销售渠道包含线上和线下。

线上渠道包括自有的 APP、官网、小程序等;还有在第三方电商平台的网店(京东店、淘宝店等)。线下渠道包括自营旗舰店、自营门店、合作门店、以及经销商。

供应链

自己有货,就需要存货和发货,这叫 仓储。仓储分为两种,自营仓储和第三方仓储。第三方仓储也称 网仓 或者 云仓,提供入库、出库和存储的一条龙服务。自营仓储就得自己负责这些。

进货要找供应商,要把商品运到仓库;卖货要把商品从仓库打包,要配送到门店或者用户手上,称为 履约。另外,还要处理退换货。从供应到仓储,再到履约,这条链路称为 供应链

运营

商品、渠道和供应链是业务运转的核心链路。但只有这些是不够的,因为业务需要增长,这种跟业务增长相关的工作称为 运营

运营可以从用户、商品、事件和玩法的角度来考虑。

用户视角有拉新、促活和促转化;商品视角有促销定价、组合售卖、品类促销;事件视角有营销活动,比如年货节、开门红、开学季;玩法视角有秒杀、限时购、定金购。

财务

上述环节都离不开财务的支持。财务要梳理利润和成本结构,还要给业务的发展提供支持。

零售业务的利润主要是销售利润。成本大致可分成五类:固定成本、采购成本、持有成本、履约成本和资金成本。

此外,公司的运转还需要其他支持部门,比如人事、后勤、行政、品牌、公关、法务等。

以上就是关于业务背景的大致介绍。

业务架构

说完业务背景,我们就得到了业务架构。有人会问,这啥也没做,怎么就有架构了?

前面的描述是对业务的总结和分类,它是描述人对业务的理解。这个理解的过程,就是做架构的思路。

我把业务分为五大核心模块:商品、渠道、供应链、运营和财务。

财务(及相关支持部门)是底座;商品、渠道和供应链是保证业务运转的核心链路;运营(和品牌/市场/公关)是业务起飞的翅膀(见下图)。

image.png

当然,你可以有不一样的架构,这个取决于你对业务的理解。

有了这样的业务架构,就可以搭建相关的业务部门,明确工作职能和协作流程,从而让公司的业务运转起来。

技术架构

假设你是公司的技术负责人。现在要搞一套技术体系,有效地支持上述业务。

应该如何设计技术架构?

记住一点,从问题出发。(问题都搞不清楚,做什么架构?)

下面我们来一步步推导出完整的技术架构。

应用层

要卖货得有“门面”。我们的门面是什么?有APP、网页、小程序,还有线下门店。门面要正常运转,需要后台系统来管理用户、商品、库存等。这些支持业务运转的软件统称为 应用

我们要解决的问题,就是去搭建支持业务运转的应用。

先看懂业务模块,再分清轻重缓急,最后搭建应用。这就是我们先讲业务架构的原因。只有搞清了业务,你才知道轻重缓急,毕竟资源是有限的。

零售业常见的应用如下图所示。

image.png

注意到应用之间存在关联,比如“APP” 和“官网”都需要用到登陆、支付和评论等功能。可以把这些通用的能力独立出来,以 网络服务 的形式提供给上层应用(如下图所示)。

image.png

互联网时代的软件可以看成服务的集合,其中软件界面和交互能力称为前端,数据和服务称为后端。这就是前后端分离或者服务化的思想。

服务层

服务层实际上是对应用层功能的实现。如何对服务进行抽象,取决于我们对业务的理解。原则是围绕业务的核心链路构建服务。

可以从 “人、货、场”这三个维度来思考(见下图)。

image.png

你可能发现有些服务遗漏了,比如注册和登录。其实不必担心,这个架构图不是具体实现,这么做是为了让人理解设计思路。

在实际研发中,有人设计系统,有人设计系统中的模块,有人定义模块的接口,还有人写设计文档,不指望一个架构图搞定所有问题,也没必要把架构图搞得太复杂(记住做架构的目的,是把事情搞简单)。

软件服务化的好处是开发方便,但是大量的服务会带来维护、调试和管理成本的增加。比如,一个应用出了问题,背后可能牵扯上成百上千个服务。要解决这些问题,还要做一些额外的“管理”工作,我们把这些交给 平台层

平台层

业务的运转需要很多应用,每个应用又对应若干服务,每个服务部署在多台机器上,这就是分布式架构(下图)。

image.png

分布式的好处是可以水平扩展,即动态地改变服务和机器数量。但是分布式也引来一系列问题,比如:

  • 计算如何保证计算结果的一致性?

  • 服务之间如何传递消息?

  • 如何让机器的负载均衡?

  • 如何追踪服务的调用链路?

  • 如何测试系统的整体性能?

为了保障上层的服务稳如泰山,平台层主要提供三种能力:基础能力、服务管理和质量保障。

image.png

注意,上图的层次关系是逻辑上的分层,不代表依赖关系。此外,平台层提供的能力可以是服务,也可以是代码框架(中间件)。

数据层

业务越复杂,数据来源越丰富,数据量也越大。这些数据既是业务的基础,又是业务发展的燃料。

数据层面要解决的基本问题是存储、集成和计算。

image.png

如图所示,数据的存储采用分布式存储。通过数据集成的能力,把数据归总到 数据仓库。数据仓库可以包含关系数据表、字典表以及图片视频等非结构化数据。

计算引擎覆盖三种常见的计算场景:

离线计算

处理海量数据,辅助业务进行决策,比如销量预测、活动选品,挖掘流失用户。要求数据有深度和广度,但是对实时性要求不高。

实时计算

获取用户实时特征,用于搜索、推荐和广告;或者获取实时的销售数据,在大屏上展示。

在线分析

支持数据分析产品,用于在线的数据分析,例如对订单、库存、利润、成本等各种数据进行聚合和下钻。

设施层

最后是基础设施,包括硬件、操作系统和软件环境。

image.png

总结

最后我们做个汇总,为了避免内容太多太杂,再做一些简化(见下图)。

image.png

回顾整个过程,我们始终从问题出发,然后一步步去寻找答案。在这个过程中,首先要抓住重点,然后抽象问题,再找解决方案。

需要注意的是,本文展示的架构图,主要体现设计思路,不是软件项目的具体实现。在实际开发中,还要对每个系统进行设计,包括模块和接口的定义,再到类的设计和代码实现。

无论是架构一个组织,还是架构一个模块,其思路是相通的。

思考

前面分析的架构思路,只是我个人的理解,如果你不认同,那一定是我错了,哈哈。

接下来我们再思考几个问题。

1、架构设计的目标是什么?

架构体现的是资源投入,所以目标是让投入产出比最大化。换句话说,要用有限的资源去创造最大的价值。

技术离业务越近,创造的价值越大。如上图所示,应用层和服务层离业务近,平台层、数据层和设施层离业务远。早期的架构设计应该把重点投入在应用层和服务层。

2、架构应该如何演进?

业务的宽度决定了技术的深度。业务变宽,技术就做深;业务变窄,技术就做浅。

“做深”是把非标准化的东西,做成标准化。标准化了就可以做产品,对内降本提效,对外输出赚钱。

“做浅”是把自己不擅长的东西,用别人的东西来替代,典型的例子就是传统企业数据上云。

当然,如果你有技术实力,想反着来也行。先把技术做深,再把业务做宽,用高风险博取高收益。

3、什么是好的架构?

能解决业务问题的架构才是好架构。先看业务的复杂性有没有降低,再看业务的发展有没有向好。不必追求高大上,也别把问题搞复杂。

4、如何架构一个国家?

这个问题很有意思,我偶尔会想一想,但我还没有答案。

5、如何架构自己的人生?

人生不过三万天,你是怎么安排的?比如,你要读多少书?赚多少钱?买多少东西?交什么朋友?看什么风景?……


本文作者:胡拉哥 来源:生活研究生
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读