老板们应该知道的关于WEB产品的技术名词


我们这里针对是普通的WEB产品,你可以理解为全中国大部分WEB产品都是这种普通的产品。一个全端的WEB产品,包括移动端,web,桌面客户端,需要用到很多技术,包括但不限于如下选择。

  • APP

包括IOS和Android两大平台,Windows Phone就算了,可以考虑React Native,代码复用,一致的开发体验,节约成本;也可以一个平台招一个,但成本高,一个就够,不是让你在移动端做视频剪辑,流畅自如,一般的数据展现和效果的渲染,一个程序员就搞定。

消息推送可选第三方服务,首选激光推送,跨平台消,API丰富,还有其他可选通道都有,不推荐自行架设推送服务,消息量没那么大,何必呢!

与后端API要设计和谐,加上版本控制,上下兼容,安全验证的移动端支持需要一开始就做好,https肯定是要上的,大势所趋吗!另外,对于IOS的发布要计划好时间节点,配合产品发布周期,需要提前发布,你知道苹果什么时候审核通过呢?

  • WEB前端

Html、css加上JavaScript和vue,完整技术栈,在加上一些特别效果组件,图表、char等等,相信可以满足大部分前端需求,结合后端API,搞定,当然这是对于一般的前端应用,如果你想在单页中,通过浏览器对上百万、千万数据进行计算绘制,想通吃各种浏览器,那另当别论。对于前端来说,通过压缩编译前端组件元素,并分发到CDN,可以打打提高前端资源加载速度。

  • 桌面客户端

使用electron,一次开发支持linux、windows、macos三大平台,大部分代码可以和web前端复用,本地存储使用sqlite,看到BearyChat和风车貌似mac端用的就是web前端,桌面端不熟,不多说。

  • 后端

提供API给前端展现,实现业务逻辑的一侧,可选择的语言有很多,python、php、java、go、ruby、nodejs都可选,c、c++不是不行,web项目太累,生态工具不完善,后端提供rest风格的api就可以,所有的客户端调用同一套api。基于不同语言,后端开源框架,如:

php -> lumen,python -> flask,java -> spring,node -> koa,go -> denco,ruby -> rails

后端语言实现的程序,表现上可以是一个个的进程,在特定端口提供服务,没有任何ui部分,只通过API和WEB以及移动端进行数据交互。如果是servlet还需要通过web中间件提供服务。

后端除了实现业务逻辑以外,根据系统规模,以及数据量和并发量的不同,可扩展的点也很多,如为了保证服务可用性需要集群部署;为了服务可控,需要服务化,引入Dubbo或者motan等第三方服务化组件;集群后用户会话是否需要独立保存;数据量达到千万级后,需要分库分表,主从部署等。

  • 数据库

10万客户端加实时并发量级并不是很大的话,不建议马上上分库分表,高可用大集群之类的方案了,单表1000w的时候在往这方面想吧。优先选择云端实例模式,比如阿里云的RDS。自己搭建的话,一主二从做好同步和读写分离,再加个延时冷备的库,基本够用。可选mysql或postgresql,mysql技术层面接受度会高很多。数据这块的压力,先从SQL语句的健壮和缓存上面进行优化吧!不要动不动就分库分表,能一个库就一个库,否则业务逻辑很难搞;看了几篇架构分析就想搞,那不适合你。

  • 缓存

在访问量增大后,需要找出系统中热点数据有那些,更新不敏感的使用缓存,尽量减少对于数据库的压力,大部分问题使用缓存就能解决,比较内存的IO比磁盘的IO快多了。

redis必备,完全当缓存用,暂不考虑持久化存储;比如再使用memcached,集群的话需要找个第三方的支持集群的客户端。redis3后集群功能也是妥妥的,当然现在也有云端实例直接购买使用,自己搭建可以搞个2、3个点的redis小集群,主备分好,也够用了。如果你想用redis持久化数据,也是极好的,比如做session的存储,中间计算过程的存储,因为redis数据类型丰富啊!

  • session

面对众多移动端和web端的session,通过统一session服务进行管理,可以参照tomcat的session管理机制,保证用户登录体验一致,并可以实现更复杂逻辑;使用redis统一持久化。

  • 队列

系统复杂一些后,各个子系统之间需要流转一些数据,解耦,基于消息触发的很多,各种MQ可以自行搜索,也可以购买消息队列服务,各种云上的都有,很是方便。

  • 连接层

dns和域名,找个靠谱的域名商购买加备案,dns可以购买dnspod服务。链路最好全部https,需要花钱买证书,或者使用let's encrypt的免费证书。

  • 服务器

直接购买选用云环境的全套吧,加上带宽。这个规模下,自建的成本优势还体现不出来,直接使用全套云基础设施,时间和资金成本都节约很多。阿里云,腾讯云,或者其它云商都可以考虑,实际测试比对之后选择。这些云提供的基础设施就像生活中的水电气,很是方便。

  • CDN

静态资源较多的时候,分发时有一定压力,购买云的服务,很多,同上。

  • 存储

开始估计还用不上,如果有大量历史数据需要存储,可以考虑搭建一套。可选方案也很多,ceph,weedfs,hdfs,首选hdfs,达到亿级别规模请再用hbase,谢谢! 如果你一开始就觉得数据量增加很快,会很快达到亿级规模,那就需要预先考虑了,这个不在我们讨论范围。

  • 安全

这个话题太大,不太懂,但是基本的要做到,web上各种攻击,XSS跨域问题,SQL注入,DDOS攻击,nginx上限流,还有就是数据库的备份和恢复。前期估计也用不上多少,都没人知道你的产品。

  • 搜索

开始估计也用不上,用like也许可以顶上一段时间,后期弄几台服务器搭建个搜索引擎,也是极好的,可选solr和es,推荐es。结合上面说的存储,如果达到使用hbase存储的规模,可以es+hbase。

  • 服务化

服务化的成本现在越来越低,推荐用motan,轻量级服务化框架,和spring结合较好,如果你后端选用的是java的话;比如一个电商系统,前期没啥用户,但是服务化可以使服务清晰,模块分明,配置也合理;当然必不可少的需要zookeeper等第三方协同了。

  • 监控等周边配套

前期你也许不想弄,可以购买监控宝等第三方服务,接入sdk后,web端查看应用的各种监控参数。各种邮件、短信、支付、合同等等服务,同样购买第三方服务即可,能花钱买到的服务就很快搞定,无需重复劳动。

这些做完了,产品才算可用!

谢谢老板看到这里!