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

十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别类整理知识,也看到有些公司这样管理应用(照猫画虎还是挺容易的),所以有个趁手的系统应用管理平台就是顺理成章的事情。现在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. Ubuntu解决安装没有候选

    Ubuntu解决安装没有候选 很多初次上手的小白们最头疼的可能就是一下这种问题了 这是我也载过很多次的坑,原因是软件安装源的问题,需要去软件安装设置里更改合适的源 结局方案如下:(具体操作) 有个So ...

  2. (目录)Fortran学习笔记:开坑!!!

    前言:因为某些原因,需要使用Fortran编写程序,记录下Fortran语法学习过程中的部分笔记.在此开坑记录,立下Flag,"希望年末能够更新完" Fortran 学习笔记 陈橙 ...

  3. VS2013的主函数问题

    报错如下: 打开属性里面,修改字符集即可

  4. 迁移appseting.json创建自定义配置中心

    创建一个自定义的配置中心,将框架中各类配置,迁移至数据库,支持切换数据库,热重载. 说在前面的话 自使用.net Core框架以来,配置大多存在json文件中: [框架默认加载配置]文件为appset ...

  5. 4 个场景揭秘,如何低成本让容器化应用 Serverless 化?

    作者 | changshuai FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维.容量规划.云产品打通集成等责任,使得开发者可以专注业务逻辑.提高交付速度 ( ...

  6. asp.net core使用identity+jwt保护你的webapi(三)——refresh token

    前言 上一篇已经介绍了identity的注册,登录,获取jwt token,本篇来完成refresh token. 开始 开始之前先说明一下为什么需要refresh token. 虽然jwt toke ...

  7. Java(8)详解Random使用

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201556.html 博客主页:https://www.cnblogs.com/testero ...

  8. 一个小众搞笑的xss漏洞练习平台

    XSS是当今网络安全事件中数量最多的攻击方式,虽然其危害性不高,但主要和其他攻击手段相结合,以实现一个复杂的攻击场景.那么,XSS是什么? XSS全称跨站脚本(Cross Site Scripting ...

  9. 《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)

    1.简介 在实际自动化测试过程中,我们同样也避免不了会遇到单选和多选的测试,特别是调查问卷或者是答题系统中会经常碰到.因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助 ...

  10. 【c++ Prime 学习笔记】第4章 表达式

    表达式由一个或多个运算对象组成,对表达式求值返回结果. 字面值和变量是最简单的表达式 把运算符和运算对象组合可得到复杂表达式. 4.1 基础 4.1.1 基本概念 一元运算符作用于一个对象,如取地址符 ...