为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的“系统”和“应用”进行更高级的提取和抽象。

十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别类整理知识,也看到有些公司这样管理应用(照猫画虎还是挺容易的),所以有个趁手的系统应用管理平台就是顺理成章的事情。现在PowerDotNet就把我自己所理解的系统应用平台最基础最核心的功能做出来,迭代几次后比初始版本加了不少扩展,给系统应用良好运维和管理打下基础。

一、系统

不同的业务部门,我们可以抽象为一个或多个系统,比如金融部门,可以抽象出账户系统、支付系统,财务系统,结算系统,风控系统等。

对于一个完备的电商解决方案,我们能想到的业务系统包括:供应链、库存、生产加工、订单、购物车、支付、财务、结算、票券、虚拟货币、商城、商品、原料、运输、配送、搜索、秒杀、团购、(云)打印、CRM、CTI、活动、消息(含邮件、短信、微信、钉钉)、多媒体、仓库管理、开放平台等。可能用到的最底层的基础设施系统包括:负载均衡、消息队列、分布式缓存、海量文件、企业服务总线ESB、网关、分布式数据库、日志、定时作业、应用升级、代码生成器、数据库管理、数据同步、自动化发布、自动化运维和监控等。我个人实际参与或主导开发过的系统,包括:基础数据、CRM、订单、OA、支付平台、定时任务、网关、应用升级、代码生成器、服务治理、财务、结算、搜索、物流、消息、票券、虚拟货币、MES(生产加工)、WMS(仓库管理)、QMS(质量管理)、TMS(运输管理)、DMS(配送管理)、监控等等,基本上电商领域的资金流、信息流和物流都有涉猎,咩哈哈。好几年前流行的所谓全栈,其实只要多搬几年砖,PC、H5、APP、RF、PAD等形式的应用都写写,后端、前端、客户端、小程序等等都给它覆盖到,外加程序员都爱折腾,各种环境自己负责发布和运维,谁还不是独当一面的多面手呢?

系统的抽象和分解, 非常考验开发人员的架构(业务架构、应用架构、数据架构、技术架构)水平。

二、应用

应用有不同的表现形式,不同的应用类型有不同的关注点。

一般公司的应用都可以分为带界面或者不带界面的,服务或者非服务等等等等,拆分方法不同,关注的应用形态也就不同。

应用的命名也是一门学问,通常要适合自己公司的规范,杂乱无章缺少规划的命名是必须要避免的,关于命名的规范和通用规则本文不再赘述。

2、应用部署管理

我们的应用,最终是要在服务器或者客户端上运行的,运维部署同样是开发需要着重考虑的问题。尤其是DevOps流行以后,可运维便于部署的开发模式肯定更容易被开发人员接受。

支持应用部署心跳健康检查、移入或移除集群等操作:

后续讲到配置中心和服务治理的时候,为了保证应用配置或者API服务的及时性和高可用,可能会按需引入ETCD和Redis等基础组件,当然这些基础组件都是插件化使用的,不是必须,我也提前实现了ETCD和Redis的人工管理(其实ETCD和Redis完全值得我们写出独立的管理平台去运维管理,后续文章我会详细介绍)。

应用部署还需要考虑多数据中心多机房多集群的问题,PowerDotNet在这方面考虑的比较周到,并预留了很多扩展接口,比如下面几个重要基础设施:

(1)、数据中心和集群

集群主要描述了一个集合,一些相似的东西,提供相似的功能,这个就叫做集群。单机处理到达瓶颈的时候,把单机复制几份,这样就构成了一个“集群”。

(2)、服务器

集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。

(3)、域名和负载均衡

上述图片仅列出部分功能效果,供大家参考。

如果系统和应用很多,关系复杂,完全可以独立出一个一级菜单进行应用集群管理。

当然实际的集群管理比我截图复杂的多。

3、应用配置

如果熟悉常见的配置中心,大家都能够猜到配置管理主要是用来做什么的。

PowerDotNet配置中心借鉴了ZooKeeper、Apollo、Nacos等成熟解决方案,并贴近实际开发人员进行了整合创新,通常业务需求应用开发只要点点按钮即可快速搞定。

配合配置中心客户端工具,可以达到配置增删改“实时”生效的效果。

配置文件会在本地磁盘生成一份,每次配置有变更,拉取成功后再保存在本地,这样哪怕配置中心挂了,也不影响应用正常启动和使用。

配置变更的历史都有保存,变更之间能进行diff,支持配置的快速回滚操作。

在分布式环境下,可以追溯各个应用服务器部署实例获取配置的生效状态,便于快速排查定位服务器问题。

PowerDotNet配置中心完美支持对配置的增删改查、推送、回滚、追溯和审计功能。

三、系统分组

一个系统,由一个或多个应用构成。而系统和系统之间,有时候也会有这样那样的联系。

系统间的关系,需要我们继续抽象。于是便有了系统分组概念。比如上面提到的金融部门,可以抽象出账户系统、支付系统,财务系统,结算系统,风控系统等。我们可以把支付、财务、结算、风控等系统归到一个或多个分组里。

再比如某个集团公司业务部门很多,业务逻辑复杂,按主业务拆分后每个业务部门都有独立的CRM、库存、订单、支付、财务、结算等业务系统,系统分组也是必不可少的,有时候甚至需要按照独立公司进行部署,这种情况个人开发多商户平台系统的时候就遇到过,这个多商户平台系统,其实就是支付平台,PowerDotNet系列后续文章会详细介绍,咩哈哈。

四、互联系统

系统和系统之间,不可避免的需要进行数据互联互通。

通常我们通过对外发布RPC接口的形式进行数据交互(特殊情况下也可能进行直接数据库访问,特殊情况有机会再说)。

如果没有系统和应用基础设施的抽象,互联互通会困难重重,自动化运维部署基本无从谈起。

工欲善其事,必先利其器。

系统和应用的提取和抽象,是大中型互联系统解耦的基石,是软件架构设计思想的提升,是程序开发良好组织管理的必要条件,为后续各种中间件、框架或工具的高效组织和使用打下基础。

下一篇介绍PowerDotNet实现的互联系统。

PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台的更多相关文章

  1. PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台

    本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...

  2. PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台

    为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...

  3. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  4. PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台

    技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...

  5. PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台

    本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...

  6. PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台

    系统和系统之间,少不了数据的互联互通.随着微服务的流行,一个系统内的不同应用进行互联互通也是常态. PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix.这个项目借鉴了工作过的 ...

  7. PowerDotNet平台化软件架构设计与实现系列(08):缓存平台

    几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...

  8. PowerDotNet平台化软件架构设计与实现系列(11):日志平台

    所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...

  9. PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台

    定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...

随机推荐

  1. 关于java实体类时间类型的格式化调整问题

    关于java bean在后台\转化为json交给前台时间类型格式调整的方法: 首先要引入fastjson依赖. 在实体类上使用注解: @JsonFormat(pattern = "yyyy- ...

  2. CSS 奇技淫巧 | 妙用 drop-shadow 实现线条光影效果

    本文将介绍一种利用 CSS 滤镜 filter 的 drop-shadow(),实现对 HTML 元素及 SVG 元素的部分添加阴影效果,以实现一种酷炫的光影效果,用于各种不同的场景之中.通过本文,你 ...

  3. mysql8.0.20安装教程,mysql下载安装教程8.0.20

    mysql8.0.20下载安装教程  mysql8.0.20安装教程 mysql安装包+mysql学习视频+mysql面试指南视频教程 下载地址: 链接:https://pan.baidu.com/s ...

  4. scratch塔罗牌的制作

    首先,这个程序的流程是洗牌->占卜,很简单的一个程序.那个程序的组成是什么呢? 该程序由22张大卡.开始洗牌按钮.占卜按钮和说出占卜结果的角色组成. 先来说说开始洗牌按钮吧. 开始的时候移动到相 ...

  5. WSL (Windows Subsystem for Linux)

    WSL (Windows Subsystem for Linux) :适用于 Linux 的 Windows 子系统. References Install WSL with a single com ...

  6. 脚本注入1(boolean&&get)

    现在,我们回到之前,练习脚本支持的布尔盲注(get型). 布尔盲注的应用场景是查询成功和失败时回显不同,且存在注入点的地方. 这里以Less-8为例: 发现查询成功时,会显示:失败则无回显. 同时发现 ...

  7. 【数据结构与算法Python版学习笔记】算法分析

    什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平 ...

  8. UltraSoft - Beta - Scrum Meeting 7

    Date: May 23rd, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 暂无 Liuzh 前端 编写忘记密码界面 Kkkk 前端 暂无 王fuji 前端 ...

  9. 北航OO第四单元总结

    OO最后一次博客作业--好聚好散 一.单元总结 作业一: 第一次是对类图进行解析,没有太大难度,只要根据讨论区提供的建议,新建两个类来存储相关数据即可实现. 作业二: 第二次作业的难度只有量的提升,然 ...

  10. 乘风破浪,遇见上一代操作系统Windows 10 - 抢鲜尝试安装新微软商店(Microsoft Store)

    背景 在微软官方文章的<十一项关于微软商店新知>中提到: 新的微软商店现在可在Windows 11上找到,我们很高兴地分享,它将在未来几个月内提供给Windows 10客户!我们将很快分享 ...