该篇将以 后端程序开发 的角度 去诠释对于程序发展技术的一个见解。
欢迎补充与纠正!
何为程序
我认为的软件程序,是 一种 可视化信息载体的 体现,不管是什么 软件,网站,小程序,APP,都是 在将数据通过不同的渠道运用不同的规则展现出来。
拿微信来说,在没有这款软件,人们之间还是可以通过口头或者电话的交流传达信息,但是不够可视化,说过的话转头可能就忘了,而微信就可以在一定程度上将信息留存,在聊天记录查看通过可视化呈现出来。
何为数据
编程世界里 万物都可以当作数据的载体,一个人,一个物体,一个动作。
在编程世界中,数据就是核心,现实生活中,数据也是核心,换句话说,编程思想在一定程度上推动着社会发展,也是为什么科技是第一生产力,为什么这样说?举个例子,京东618,天猫双11,各种购物狂欢交易的背后 其实都是 资本家对于 数据的掌控力的体现,你浏览的东西或者说是你喜欢的东西在大数据下无所遁形,你的喜好在当前 数据信息化时代 变得值钱,于是你就被拿捏,你喜欢的东西打折心动不,你说没有钱买是吧,花呗白条信用卡,12期免息,你买不买,正因为没钱所以才要买,因为日常的价格你更负担不起,一年就这么几次,于是乎就贡献了交易额。
往回倒退几十年,网上购物方式是想都不敢想的,但是也并没有说家里的东西缺的什么都不买的,只是方式上在线下购物,那么你的信息说白了没什么用,在那个时代没人在乎你可能喜欢什么东西,只有买卖罢了。喜欢了就去买,买完了就结束了。
经历经济飞速发展的这个阶段,我见证了,也因此深刻理解 数据时代来临,大数据的重要性。谁是 数据 之王 谁就是 真正的 王。
何为程序数据
心中所想------程序中的这些数据是怎么把控的。
- 数据从哪来的啊
- 数据怎么传送的
- 数据怎么存储的
- 数据怎么个性化
数据从何而来?
1.大部分认知层面的数据 通过客户本身搜集 也就是 前端面向用户端,采用 H5页面或者是 APP页面让用户进行数据填充的行为采集
2.小部分一些配置规则,为服务客户而定的数据
3.通过物联网的设备采集
数据怎么传送的?
1.通过AJAX 脚本页面上的一种 交互技术,传到 服务器端
2.服务器端通过 业务逻辑规则 将数据过滤成心中所想然后传送给数据库
数据怎么存储的?
1.数据库技术/缓存技术,将数据存放在 服务器电脑的 内存/磁盘中
2.与硬盘内存进行 I/O 读取和写入
何为程序架构
要想达到一个 数据 流程的闭环,简单分析出这 4个要素 ,就说明了并不是一个简单的事情,各个环节 都需要相应的技术手段 相辅相成,才能达到一个程序软件。
那么做任何事情之前,都需要有个指导方向,即使知道了自己要做什么,怎么做。建造行业有个职业就 架构师,就会把控全局的建筑流程,因此 程序界也 衍生出 架构这个 理念,并有了架构师的 职业。因此架构师也在一定程度上代表了 超高的水准 把控全局。
有效指导和最大程度的保障软件开发的质量、周期和成本。
架构发展过程
通过架构发展,来整理出 各个部分相关技术的进化,来了解程序技术的发展.
从森林树林到树木花草看枝繁叶茂。
-
单体机时代
早期电脑普遍昂贵,数据量很小,从开发成本到实现软件,最合适的就是一台电脑全部搞定,应用程序业务逻辑代码,数据库,文件都在一个服务器上,共用一套 硬件设备,数据通信也不用担心,都是一家人,调用很方便。
举例:小乐开了一家小饭店,初期来的人很少,于是小乐又当服务员又当厨师又当收银员,但是也完全不影响营业。 -
单体集群时代
人开始多了,饭店开了一个分店,由小乐的弟弟小福打理,不过也是小福又当服务员又当厨师又当收银员。
本质上处理方式还是 单体 一人一台服务器包揽,只是数量扩充。问题来了,如何引导客人在俩个店达到一个均衡,不能10个人都去一个店等,另一个店空空如也,于是 负载均衡技术 Nginx为例 诞生。
好处就是,当一个店关门,不会影响客户吃饭的情景,也就是 容错高了,一台服务器宕机,不会直接崩盘。
-
分布式------垂直架构
慢慢的发现,客人店中大多数情况都是在等饭,结账很快,那么小乐就发现,自己厨师身份和服务员的身份 在功效上是无法对比,就是二八定律 八成的时间集中在厨房 当厨师的活一直很忙,当收银员就很轻松于是就想如何让 厨师做饭的效率高起来呢?
鉴于小乐厨艺效率不高,就请来一个厨师,自己只收银即可。这就是垂直架构,合理高效的分配,不局限于一台服务器一个人去做事,也衍生了模块化概念,在某一个模块利用高效的资源去处理,因为厨师模块工作忙,于是专门请个师傅也就是打造一个 厨师服务器专业对口,效率高。
所以总结一下就是,模块化的管理,对不同模块针对性的打造相对应高效率的服务器。在硬件上体现的话就是 厨师服务器 使用更牛的 cpu 或内存更大
补充:二八定律:80%的业务访问集中在20%的数据上
问题:原来一台服务器一个人,现在俩台服务器俩个人,怎么通信交流?
于是技术上诞生了多个模块之间的交互:WebService、RPC等方式进行访问 -
分布式------面向服务SOA
后来,饭店不限于家常菜,推出了烧烤(扩充业务),小乐又请了烧烤师傅。那么问题来了,点了烧烤和炒菜 ,结账是分开结算还是一起结算?
按照生活常识来说的话应该是一家店一起结算,编程上也应该是一起算,但很明显是俩个模块,炒菜模块,烧烤模块,不同的业务,都使用了收银模块,这就 体现了一个 很重要的概念 解耦重用复用,这就意味着 收银模块 不在单独属于别的任何一个模块,它应该是独立的 供其他模块调用。
于是乎,服务来了,它为模块增添了羽翼,让它变为独立者,为其丰富了调用
那么问题来了?服务怎么通信? RPC和MQ
在原有基础WebService、RPC等方式上配合- 集中管理服务ESB服务总线 通过MQ通讯 各个服务
- 分布式管理服务技术 Dubbo
随着时代进步,更多人能够买得起电脑,成为电脑用户,上网的潮流必然使得流量在增多,原始的软件不足以支撑大流量的冲击,怎么办,改进,就像一个饭店,容纳10个人,平常也就7,8个,现在有100个人要来吃饭,怎么办?要么店面扩张,容纳多点人,要么就是开个分店,引走客流到分店去
怎么改进?
-
分布式------微服务
升华,体现在 微化 更彻底的细化,颗粒度把每一个服务当成了一个 独立的组件,比如说结账服务 (支付积分退款),但是变成微服务可能会细化成 支付服务 退款服务 积分服务,所以说要看 实际情况 是否必要去 拆的细化,以及 是否通过ESB 总线 管理服务更有效,毕竟 微服务之后 都是 各自为战 各自部署 只是在通信建立联系,管理不太方便。 -
分布式------集群
集群其实就是一个数量化的复制,里面的内容都是一比一一样的。更多承载,也不怕一台服务器宕机的情况。
涉及技术发展
- 通信 网络通信 ajax webservice rpc 到现在的 webapi grpc MQ Nginx
- 前端 js jquery vue
- 业务逻辑 MVC 前后端分离
- 存储 数据库 redis缓存
- 技术管理工具技术 Kafka Zookeeper docker K8s
- 指导思想 DDD 领域驱动
- 项目框架搭建思想 ABP
小结
每一个方面所涉及的技术 都是很大的一个 技术栈,里面需要很多细节和知识点需要去学习。
这里只是大概了解了一下 技术的几个方向,以及大概技术衍生的来源,明白了一个大纲,在沿着某个所感兴趣的方向去钻研,变得精通。
不能什么都不懂,也不可能什么都精通,知道潮流并不一定要去引导潮流,有些不是专攻点做到了解就可以,自己的方向如果越精通越好。
所以 也就是为什么 现在 devops 开发运维 以及 CICD 持续集成 ,就是为了融合贯通技术潮流,需要各自领域的大神支撑技术,也需要融汇技术对应的管理。
于是乎 大型敏捷 也开始流行,敏捷教练职位也开始吃香。
在趋于成熟的技术栈中,公司项目的开发周期运转是敏捷的关心之处,持续高效快捷交付是目标。
完结!欢迎补充与纠正!