平台应该怎么设计,它和框架有何不同?很多时候大家常常将它们混为一个概念,其实不然,在我看来平台是管理生态建设的,而框架是规范和引导编码的,两者相互成就彼此。使用框架开发出来程序后,应该交由平台控制和管理,平台不只是管理程序(产品/项目),最主要的是为人提供服务,这也是软件存在的本质,为使用者提供优质的体验和舒畅的服务,通过电子化办公简化业务复杂度和业务量。
站在程序员的角度,一旦说到框架和平台,那么首先想到的应该是选择哪一门编程语言去实现?在选定编程语言后应当选择那一套技术去实现,这应该是大多数国人的习惯,因为我们习惯了使用别人设计开发出来的框架。然而今天我要说:你可以自由选择编程语言和编程语言所存在的框架,因为我说的平台和架构与编程语言没有直接关系,你可以选择Java、也可以选择C#、还可以选择GolangPHPPython......,只要遵循云平台和程序架构设计规范即可。
如果你不相信我说的,请看下边我罗列的一个基础平台下应该具备的十大系统:
1.控制系统设计
1.1.服务端
1.1.1.版本管理:发布程序的各个版本
1.1.2.集群管理:产品,版本(v1.0,v2.0等),程序,实例
1.1.3.配置管理:实例配置参数,与版本直接相关
1.1.4.编排管理:地域,语言,时区
1.1.5.升级管理:设置升级方案
1.1.6.更新管理:程序自我更新
1.1.7.状态管理:实例报告自身状态
1.1.8.注册管理:服务注册上线
1.1.9.负载均衡管理:服务发现与使用
1.1.10.问题管理:服务下线、服务异常,更新失败,状态异常等
1.1.11.自动管理:依据状态报告自我调控
1.1.12.通知管理:配置异常时消息通知事项
1.2.客户端
1.2.1.版本管理(发布程序的各个版本)
1.2.2.发布管理(设置升级方案)
1.2.3.更新管理(完全更新,补丁式更新)
2.平台系统设计
2.1.资源管理(产品/程序,模块/菜单/命令等)
2.1.1.资源权限管理(资源与角色,角色与用户)
2.1.2.资源教程管理(以书籍形式供他人阅读使用
2.1.3.资源版本管理(用于控制调用方与服务方版本的一致性)
2.2.安全管理
2.2.1.安全令牌管理(token)
2.2.2.安全名单管理(黑白名单,IP地址)
2.2.3.安全防御管理(脚本攻击,xss/csrf等)
2.2.4.安全算法管理(rsa、aes、shaXXX等)
2.2.5.安全位置检验(验证当前IP地址的位置,以及常用IP地址等信息)
2.2.6.安全状态检测(账户的安全状态,如登录地,密码状态等)
2.3.分布式管理
2.3.1.主子库管理(根据定义自动创建子库表结构,同步基础数据)
2.3.2.读写库管理(实现读写分离提升性能)
2.4.用户管理
2.5.机构管理
2.6.日志管理
2.7.消息管理
2.8.高级管理
2.8.1.缓存管理
2.8.2.队列管理
3.地理系统设计
3.1.地球/洲/地域/国家/区域/省级/市级/区县/办事处或乡镇/街道或行政村/小区或村庄
3.2.扩展:电信编码,网址后缀,邮政编码,语言编码,时区划分,名称管理,简介信息等
4.语言系统设计
4.1.用于打造多语言生态环境
5..通用系统设计
5.1.提供公共数据服务,如天气等
6..生态系统设计
6.1.用于打造生态圈,接入开发者和合作伙伴
7.外联系统设计
7.1.管理购买或接入他人系统服务的信息
8..文件系统设计
8.1.用于存储非网格化的文件,如图片,音频,视频,文本文档等。
9..流程系统设计
9.1.用于表单审核控制管理,独立出来专业管理
10.反馈系统设计
10.1.适者生存,更好服务用户和市场。
上述系统仅从平台角度设计,并不包含具体的某个程序,如网关系统等。看过后是否还在怀疑我说话,一直以来都在坚持、并努力做到从零开始设计、编码、测试、部署,去一探底层技术的究竟,尽可能的避免养成依赖他人技术的习惯,为此职业生涯更换过多次工作,虽然很坎坷,但终归有所获有所得,在此特别强调一点,不是建议大家都去造轮子,而是建议大家做到技术人应该具备的品质,去探索、去实验、去发现。
想要设计出一套自主可控的技术平台,非常不容易,也绝非一朝一夕间可以早就的,这需要持续的投入(人力、物力、财力)和长时间的研发,就像我一直将“研发”和“开发”这两个词着重划分开解释一样,因为在我看来研发是创造,从无到有,而开发是制造,两者不可同日而语,很多boss都希望自己的技术团队可以弄出一套像淘宝、京东等一样的平台,只是忽略了这么浩大的工程所需要的投入,说远了,当然这也绝非不可能实现,只要是敢于投入、放得开、放得下、天道酬勤,有基于实际的设计规划和可行的实施方案,志存高远、励精图治,循序渐进、有条不紊的推进,最后是有可能实现最初的希望。