【从开公司到开发全平台产品】4.后端开发的思考、实践-UPUPMO

  • 大家好,我是 UPUPMO.com 的作者 Meek,欢迎观看《从开公司到开发全平台产品》系列。
  • 希望通过该系列可以帮助新手,快速了解全栈软件产品的一些思路、应用。
  • 本期我们讲解第四章:《后端开发的思考、实践》
  • 我们将会从以下4个小节进行探讨:
1. 后端行业中常见争议
2. 后端企业级架构标准
3. 各类数据库应用场景
4. 如何挑选技术、框架

1. 后端行业中常见争议

1.1 行业中的普遍争议

[图片上传失败...(image-8071b3-1654935531085)]

  1. Windows、macOS、Linux 哪个更适合程序员日常?(暂停 3 秒,大家想一下自己心中的答案)
其实这个问题是不够严谨的,理论上应该说哪种程序员? 是嵌入式? 后端? 安全? 驱动? 等等,但是如果这样的问,该争议就没意思了。
这里我们先假设是可以用 TNT 软件,不讨论道德洁癖,并且假设的是国内环境,因为国内 Windows 流氓软件确实很多。
我说下我个人答案:我喜欢 macOS。综合看 macOS 和 Windows + WSL 可以干的事情都差不多,但是 macOS 是一个生态,没有割裂性,整体沉浸感更强,系统也更加稳定,真的是稳如狗的稳。
我还喜欢 macOS 大量的收费软件,它们都是有人维护、更新,我们可以经常跟进
缺点就是性价比不高,白苹果很贵。
至于 Linux,该是会用服务器的人终归把它当服务器,做桌面的话只能妥协国内那些必备软件体验,或者使用网页版、手机,割裂感太强。
同时 Linux 下的生活软件也是被更新最慢,所以只适合做服务器或者单纯只开发。
  1. 程序员应该用哪个 IDE 或编辑器?

[图片上传失败...(image-95aad6-1654935531085)]

我的答案是:
这个问题也是不严谨的,应该是具体到哪种程序员
我主要是前后端开发,所以我是 JetBrains 的坚定支持者,它缺点是收费,并且需要大内存的电脑。
  1. IDE 应该用浅色主题还是深色主题?
我的答案是:
这个我倒是有自己的一套健康理论
首先大多数程序员都是整天对着电脑的,需要一个防蓝光眼镜,一个屏幕挂灯,并且把系统改为夜览模式,此时看到系统会是偏黄色
在这种条件下对你的眼镜保护是最好的,此时屏幕亮度不会很高,用深色主题看起来不清晰,所以我觉得应该是浅色主题
  1. 缩进是用 Tab 还是空格?
我的答案是:
一开始用 Java 习惯用 Tab,但是从开始写前端后,我偏向于应该让所有语言都是用空格。
  1. 最好的注释就是代码本身?
我的答案是:
理想状态下应该是,但是实际情况下,需求各种各样,有的细节没有流程图、时序图根本说不清楚,所以我倾向于有注释,只是简单方法、简单单词的注释可以少写

1.2 开发语言相关争议

  1. 谁是世界上最好的开发语言?
我的答案是:
不存在的,没有哪种语言可以干任何场景的需求。
但是我喜欢静态语言,最好是类似 Rust 这种,可以在编译期就暴露出大多数错误的这种语言
  1. Go 要取代 Java 吗?
在回答这个问题之前得先介绍 Pivotal:

2003 年,Rod Johnson 和同伴创建了 Interface 21
2008 年,改名为大家熟知的 SpringSource 并收购 Covalent 得到 Tomcat、Geronimo、Apache Axis
2008 年,SpringSource 收购 G2One 得到 Groovy、Grails
2009 年,SpringSource 收购 Hyperic
但是 2009 年 8 月,VMware 收购了 SpringSource
2009 年,SpringSource 收购 Cloud Foundry 平台
2010 年,SpringSource 收购 RabbitMQ、Redis、GemStone Data
2012 年,Rod Johnson 离开 
2012 年,EMC 又收购了 Pivotal Labs 公司;
2013 年,EMC、VMware、通用电气和收购来的 Pivotal Labs 公司重新组建了新的公司 Pivotal,此时 EMC 是控股股东
2015 年,戴尔又并购了 EMC,所以严格算此时是戴尔当家
2018 年,Pivotal 上市,但是后续股票不理想
2019 年,VMware 收购 Pivotal 变成的控股股东,然后把它从纽交所摘牌,开始主推 VMware Tanzu 生态(是 K8S 生态)
更多信息可以看:https://wikipedia.org/wiki/SpringSource

从 2003 年到 2019 年来,Spring 所代表的企业经历了好几次收购、被收购,所以我们可以看出来 Spring 所代表开源是需要大量钱、优秀的人才能堆出来。
还是我上一章节那句话:写代码就是写 Bug 过程,一定要有金主支撑不然很难维持。
Java 单体、大数据、以及过去十几年的旧体系,目前还是会继续存活,但是 Go 带来的云原生趋势越来越明显,而且也有大金主支撑。至于 Rust 还要再熬一下生态。
目前的世界因为 K8S 变了,所以我的结论就是:Go 会在未来代替 Java 成为最大主流,但是需要继续熬一下。

  1. MySQL、PostgreSQL 之争
从性能和插件扩展性上看 PostgreSQL 更优秀。
但是,PostgreSQL 国内流行度不高,所以学习成本、维护成本就无法把控。
并且国内云厂商自研的分布式云数据库引擎协议,都是优先 MySQL,所以从长远看,用 MySQL 更有助于后续上云。
  1. Java ORM 框架之争
Java ORM 框架主流是 JPA 和 MyBatis
我个人不反感 API 方式,但是对于复杂业务,我喜欢先在 Navicat 中进行书写、测试,
确定没问题之后,直接把 SQL 复制到 XML 中,所以我偏向 MyBatis
  1. JDK 版本争论
从类型上可以分为:
OraceJDK
OpenJDK
Amazon Corretto
Alibaba Dragonwell
Tencent Kona
HUAWEI 毕昇
等等其他

从版本号上分主流有:
JDK 6
JDK 8
JDK 11
JDK 17

我个人试过:OraceJDK、OpenJDK、Amazon Corretto 的 JDK 8、JDK 11
都是对同一个后台多模块项目进行编译、接口压测 QPS,得到结果还是以 OraceJDK 8 为最佳或者说差异不大。
大家可以根据自己的需求做下压测,选择自己最适合的。

2. 后端企业级架构标准

[图片上传失败...(image-284b5e-1654935531085)]

  • 立这个标准主要目的是:每当我学习一个新的后端语言、后端框架,我都会按照此功能需求进行调研
  • 我主要是以业务驱动去思考使用的语言、框架
  • 其中微服务需要的组件较多,放在第二部分

2.1 基础标准

IDE 代码补全、纠错支持
IDE 调试、重构支持
公网包管理、私服包管理
单元测试
文件上传、下载
多环境配置
性能分析工具
调试工具
事务管理
日志工具
Web 安全:SQL 注入、XSS、CSRF、SSRF、上传漏洞
缓存库:Redis、KeyDB
传统数据库:MySQL、PostgreSQL 等


调度工具
参数校验框架
持续集成、容器化
度量指标实时上报
静态资源配置
Excel、PDF 等文档工具
WebSocket、gRPC、MQ、MQTT
事件监听
拦截器、过滤器、监听器思维
参数解析器
返回值处理器
统一异常管理
国际化多语言



AOP 切面思维
单点登录
远程调试
流程引擎
规则引擎
异常分析:SQL异常、框架异常
搜索引擎:Elasticsearch、Solr、OpenSearch 等
列数据库:ClickHouse、HBase 等
时序库:Prometheus、M3DB、InfluxDB 等
图数据库:Neo4j、Dgraph 等

2.2 微服务标准

分布式 ID
分布式缓存
分布式锁
分布式事务
分布式调度
分布式日志
分布式消息

熔断、限流
注册中心
API 网关
配置管理(路由、限流动态配置)
链路追踪
gRPC
系统监控
度量指标监控
单点登录、认证、鉴权
A/B测试、灰度发布

3. 各类数据库应用场景

[图片上传失败...(image-381649-1654935531085)]

传统数据库的范式要求既是缺点也是优点。
缺点就是大家都怪它不灵活,但是这同样是它优点,毕竟死板的东西跟容易被维护、控制。
我个人喜欢做事死板,但是也排斥不灵活的,主要还是看应用场景的合适原则
  1. MySQL:传统数据库思维场景
  2. Redis:内存存储场景
  3. RabbitMQ:消息队列场景
  4. Elasticsearch:全文检索、复杂搜索、可视化分析
  5. ClickHouse:数据量大、批量写入,查询条件简单、列与列之间联系不大的场景
  6. MongoDB:结构不确定,聚合查询,查询多
  7. Neo4j:图类结构的场景,比如:社交关系、企业关系、多维关联分析、交通物流、推荐系统
  8. Prometheus:物联网设备采集、各类监控数据采集等基于时间线的连续数据

4. 如何挑选技术、框架(重点)

可以从下面看出来,我基本都是围着 GitHub 转,可以说我最大老师就是 GitHub 本身,也推荐大家养成这个习惯
  1. 查看官网文档编写情况
  2. 查看 GitHub 的 star 数量,越高表示越流行
  3. 查看 GitHub 的 Contributors 数量,以及主要参与者活跃
  4. 查看 GitHub 的发布记录
  5. 查看 GitHub 是否有资金赞助者否属于某些大企业
  6. 针对某些你认为常用 API 在 GitHub 进行全文检索,查看使用它搜索到的项目数量
  7. 在掘金、博客园、InfoQ、CSDN、51CTO 等社区搜索,查看活跃度
  8. 对基础项目进行性能测试
  9. 查看其框架搭建起来是否能尽可能多地满足我们前面的标准
  10. 其他资料,比如:各大云厂商支持的架构、ThoughtWorks 的技术雷达、GitHub Octoverse、已出版书籍等等

下期预告

  • 下期我们将介绍《前端开发的思考、实践》,分别从以下 4 个方面进行讲解:
1. 前端企业级架构标准
2. 主流前端框架对比
3. 正在发展的云开发介绍
4. 我常用的前端框架介绍
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容