互联网系统的问题与方案 - 第四周作业
题: 一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
本人互联网小白,没做过互联网应用,不知道有啥技术方案,只是听过一些牛逼服务,所以只能阐述自身的认知。
我的考虑方向是首先问典型的大型互联网应用有哪些坑,会碰到啥问题,有什么技术方案和手段来解决。所以我自己大概考虑了有一下几种情形。
场景
用户 (面向的群体,规模,层次)
需求 (关注点,解决什么问题,达成什么目的)
生命周期(维护,升级,服役时长)
……
成本
资金
时间
人力
……
如果对用户群体的服务,中台和云服务是很好的选择,对企业的需要搭建私有环境,定制化服务,成本代价都会大很多。
互联网应用主要的难点痛点是在业务上,而非性能上。由于本人对业务没有接触,下述针对性能瓶颈和运维解决方案列举和简单说明。
瓶颈
大部分问题主要是由于系统性能不足引起的,常见的包括cpu计算能力和读写性能达到瓶颈或资源利用不充分。解决的方案包括"垂直伸缩"和"水平伸缩"。硬件就不多叙述了,主要讲述软件解决方案。
负载均衡
分摊到多个操作单元上进行到不同机器上执行,更合理的利用系统资源。
DNS(GEODNS)
反向代理(NGINX)
NAT(LVS)
分布式
将多个计算和读写节点组合统一管理,可动态的对外提供服务,性能理论可以无限提升,解决了垂直伸缩无法解决的问题。
存储(ceph/hdfs)
缓存(redis/memcached)
计算(spark)
边缘服务
服务器响应速度除了性能不足外还受限于网络传输,数据传输过程有延迟,边缘区域访问中心节点需要花费更长的时间。
CDN
异步
异步能大幅提高服务的并发能力,避免不相干的请求操作的等待。
运维
大型互联网十分复杂,如果没有系统级的辅助工具,维护上需要投入大量的人力和时间。
监控(zabbix)
监控能提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
虚拟化(docker/kvm)
容器或虚拟机可以提供更安全单一的运行环境,对资源隔离,保障系统的安全,也便于对系统资源的管理,对服务可以快速部署和更新。
检索(Elasticsearch)
能很方便的使大量数据具有搜索、分析的能力,能使数据在生产环境变得更有价值。
容灾(zookeeper/keepalive)
分布式环境能提供良好的分区容错,在机台故障依然能对外提供服务,最常见的就是多机热备的方式运行。
安全
.....
迭代
迭代过程感觉像重用和拆分的过程,提取共性,拆分差异。
消息队列(rabbitmq/kafka)
消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。
远程调用(rpc)
业务能更好的扩展和解耦合。
产品的迭代通常会设计业务需求增加,变更,新功能的扩展,而推动主要动力来源于数据。数据的来源有对方(网络爬虫\第三方机构),自身记录(日志\数据库),对数据的加工处理和挖掘的技术本人也不是很了解。
版权声明: 本文为 InfoQ 作者【X﹏X】的原创文章。
原文链接:【http://xie.infoq.cn/article/8622d918db296a3a3b453c59e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论