中等创业公司后端技术选型
-
Upload
wang-hongjiang -
Category
Technology
-
view
802 -
download
2
Transcript of 中等创业公司后端技术选型
![Page 1: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/1.jpg)
中等创业公司的后端技术选型
错⼑刀@挖财 http://hongjiang.info
![Page 2: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/2.jpg)
中等互联⺴⽹网创业公司?
![Page 3: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/3.jpg)
怎么定义
• 公司⼈人员规模?
• 产品的⽤用户量/访问量?
• 融资/⽣生存状况?
![Page 4: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/4.jpg)
怎么定义
• 公司⼈人员规模? – 研发⼈人员在 50 ⼈人以上
• 产品的⽤用户量/访问量? – 百万/千万 级别以上
• 融资/⽣生存状况? – 已有⼤大致的发展模式
![Page 5: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/5.jpg)
架构就是做选择
• ⼈人的因素 – ⽔水平、背景、历史因素
• 业务特点
• ⽣生态系统
![Page 6: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/6.jpg)
架构就是做选择
• 扩展性: – 可能的变数
• 稳定性 – 运维的成熟度 – 经得住考验
• 安全性 – 是否快速响应
• 没有最优,只有权衡
![Page 7: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/7.jpg)
略微进取⼀一点的保守派
![Page 8: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/8.jpg)
编程语⾔言
• ⼤大部分业务基于JVM⽣生态系统 – Java8/Scala2.10+
• 少量 – C++/Go
![Page 9: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/9.jpg)
后端栈
• 负载均衡 • HttpServer • 应⽤用服务器 • Web/ Front-end层 • 服务调⽤用层 • 缓存 • 持久层
![Page 10: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/10.jpg)
负载均衡/反向代理
• Haproxy
• Nginx/Tengine
• 反向代理与后端应⽤用服务器的连接模式(插件实现)也是需要考虑的
![Page 11: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/11.jpg)
应⽤用服务器
• Tomcat (采⽤用) • Jetty • Jboss • Wildfly/Undertow
– 不成熟
![Page 12: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/12.jpg)
应⽤用服务器
• Tomcat – 对于⼤大多创业公司的访问量BIO⾜足够了,很稳定 – NIO在7.0.52后的版本也是很稳定的 – 不建议采⽤用基于native的APR模式 – 建议单应⽤用部署
参考: taobao使⽤用ali-tomcat遇到过的⼀一些问题和经验http://hongjiang.info/index/tomcat/
![Page 13: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/13.jpg)
Web框架
• Spring-MVC (采⽤用) • Play-framework (内部⼩小范围) • Struts (不适合) • Webx (不适合)
![Page 14: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/14.jpg)
Spring
• 依赖注⼊入(DI)是⼀一种协作⽅方式
• 群众基础(⾮非常重要)
• 遵循⼀一种统⼀一的⻛风格 – 对于团队 xml优于annotation
![Page 15: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/15.jpg)
SOA
• Dubbo – 没有其他可对⽐比的(群众基础)
![Page 16: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/16.jpg)
SOA
• Dubbo 的注意问题 – 默认配置是为阿⾥里的场景预设的 – 建议线程池采⽤用cached⽅方式 – 注册信息的本地缓存⽂文件路径设置不要⽤用默认值
– 写操作不要设置重试 – Hessian bug很多
![Page 17: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/17.jpg)
链路跟踪
• 淘宝鹰眼 (未开源) • Twitter zipkin • ⼤大众点评 Cat
![Page 18: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/18.jpg)
⽇日志采集
• LogStash
• Elasticsearch
![Page 19: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/19.jpg)
消息系统
• Kafka (采⽤用) • MateQ • RabbitMQ • Activemq
![Page 20: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/20.jpg)
消息系统
• Kafka的⼀一些感受和建议 – 稳定,快速 – 量不⼤大的情况单分区⾜足够 – Replica 多份是必须的 – 注意消息重复的情况 – 建议发送时启⽤用ack – 消费端的offset不建议采⽤用zk维护 – 合理的设置保留时间
![Page 21: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/21.jpg)
缓存
• Memcached
• Redis (采⽤用)
![Page 22: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/22.jpg)
数据层
• Mysql + Cobar (采⽤用)
• PostgreSql
• Hbase (采⽤用)
• MongoDB (采⽤用)
![Page 23: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/23.jpg)
数据层
• 连接池: – Druid (可监控性) – 建议在应⽤用上配置,不建议在servlet容器层配置
• 框架: – Mybatis
• 注意类型参数
![Page 24: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/24.jpg)
数据流处理
• Akka
• Akka Streamings
• 其他streaming框架
![Page 25: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/25.jpg)
数据流处理
• Akka – Push or Pull ? – Back pressure – 持久化特性不够稳定 – 设置合适的Supervisor – 与Spring 的整合
![Page 26: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/26.jpg)
模块化
• 依赖冲突与模块化
– OSGI 或 ⾃自实现⼀一个轻量级的隔离? – 暂通过脚本⾃自⾏行解决 – Maven的仲裁机制的问题 – 未来随着业务和⼈人员的扩张,模块化问题是绕不过的
![Page 27: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/27.jpg)
监控&诊断
• JMX
• ⼯工具&脚本
• Agent – 不要因为Agent在每台机器都有⽽而基于它做太多的事情(进程被传染的案例)
![Page 28: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/28.jpg)
安全
• app端通讯⾛走ssl是必要的
• 设置Tomcat的app⺫⽬目录权限只读
• 框架漏洞
![Page 29: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/29.jpg)
安全 • Tomcat的安全隐患 (及时关注,及时更新)
– eg: 7.0.53以下版本的Dos漏洞 构造特殊大小的chunked请求
$ echo -n $'POST /test.war/index.html HTTP/1.1\r\nHost: any\r\nTransfer-encoding: chunked\r\n\r\n1f2f3f4f5f\r\na\r\n0\r\n\r\n' | nc localhost 8080 注,如果前端⽤用Tengine 不受影响。 1.2.9版本及以前不⽀支持chunked。 1.4.X版本⽀支持,但是两种情况: ⼀一种是收完上传内容,再发往后端,这种会使⽤用Content-Length,没问题。 ⼀一种是收⼀一段转发⼀一段,这种⽅方式tengine(nginx)会重新构造chunk包再发往后端,所以chunk⼤大⼩小可控。
![Page 30: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/30.jpg)
其他
• 序列化 – 1) json – 2) msgpack – 3) hessian 随着服务规模膨胀,cpu耗费在序列化/反序列化的⽐比重增加
![Page 31: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/31.jpg)
其他
• 分布式锁:
– 1) zookeeper – 2) redis
![Page 32: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/32.jpg)
其他
• 异步化
• Servlet3.0/3.1
• 静态资源托管以及CDN的选择
![Page 33: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/33.jpg)
其他 scala tips • Scala编译选项:
-feature -deprecation -unchecked -explaintypes -Yno-adapted-args -Ywarn-dead-code -Ywarn-unused -Ywarn-unused-import
![Page 34: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/34.jpg)
其他 scala tips
• Scala 的陷阱
– http://hongjiang.info/scala/ – pitfalls 系列
![Page 35: 中等创业公司后端技术选型](https://reader031.fdocument.pub/reader031/viewer/2022030309/58f17ae61a28ab82148b45bd/html5/thumbnails/35.jpg)
架构是衍化出来的,不是规划出来的
• 可⽤用优于完美
• 整体优于局部