淘宝十年记录了,淘宝技术发展以来经历的技术提问,问题瓶颈,任何大型系统的架构都不是一朝一夕的出来的。全部都是从小型项目不断发展而来,遇到问题瓶颈,解决问题瓶颈,而目前最常见的大型项目架构思想如下所示:

一个网站最初,所有的服务应用系统application,数据库服务系统database,文件系统filesystem都部署在一台服务器上面,及所谓的all in one

如上:随着业务的增长,并发访问量增加,服务器性能开销逐渐增大;进而无法跟随业务量,这是最简单的做饭就是将 三个服务,应用系统,数据库系统,文件系统,分别放在一台服务器上面

这时候服务器系统基本能够满足业务需求,但是随着并发访问的数量增加,数据库系统,就会成为该应用系统的瓶颈,数据库服务系统的压力会特别大,希望减少数据库服务器压力。此时提出了缓存,希望80% 的访问内容,都集中在20%访问的内容上面,而20%的数据都缓存起来

缓存在本机呢,数据库服务器系统的压力还是很大,系统此时及引入分布式缓存集群,同时数据库服务器也有本地缓存,从而来应对大批量的访问。让访问优先访问缓存,只有缓存不存在的情况下才访问数据库系统,这样提高用户访问速度,也解决数据库服务器的压力

随着更大业务量的增加,数据库,使用缓存集群,已经解决部分问题,但是业务量继续增加,应用系统的的服务器,已经不能支持更大的访问量,此时就出现了负载均衡技术,对更多的请求,横向的引入应用集群:如图:

负载均衡就要考虑一些问题了,请求到底怎么分配到这些应用服务器,随机轮询,随机到那个应用服务器,就那个应用服务器处理?或者最小负载,权重,本地等等策略.这些都有优缺点,架构者可以根据自己的系统进行选择

特别注意的问题:负载均和策略如果选择不得当,用户登陆..一般我们把用户信息保存到session 中,如果应用集群,这是session是在不同的服务器上面,用户在此发送请求,有可能通过其他的服务器,那么会获得不到session ,导致登陆失败。所以通常也会决绝这个问题,那么,可以将session 存入到cookie中,或者session集群到其他的应用服务器中,这样每次验证,session 每个服务器也是存在session,或者同一session 的服务器。session都从该服务器中拿

这时候,session都保存在了一个服务器,保证session不会丢失,一致性等等,就非常重要了,也意味着session服务器也是非常重要,此时可以考虑主从备份,确保session服务器数据不会有问题

业务继续增加,数据库明显会有瓶颈,无法支持更大的业务数据,那么可以考虑数据库端的处理,主从备份;读写分离,如果是读取数据,就到读的数据库服务器中去拿数据,如果是写的话,就到写入的数据库中去拿数据,再利用数据库主从机制,进行数据备份,保证一致性。而这是需要重点关注的

数据库采用主从备份策略之后,又采用了CDN技术,保证了系统访问网络延时可靠性能及稳定性,反向代理实现用户数据缓存,在使用分布式文件系统代替普通的文件系统,拓展文件服务的各项性能

业务继续增加,数据库压力还是会继续增加,怎么办?此时可以对数据库继续优化,及分库分表,根据表对数据库进行分库,一张表的数据如果太大,也可以分成多个库,结果如下

由于分库分表,各表都是独立的,到用户查询数据的时候,由于表和表的关系,就会出现服务器额外的系统消耗,如果搜索数量一旦上来,这些问题是没法解决的,此时出现了索引和nosql等等

数据库分布式集群缓存分库分表,造成的问题,那么可以考虑,搜索作为一个主要的业务场景,引入NoSql服务器,;来降低查询数据时候的压力

作为大型项目架构,其实还有很多问题需要去关心,架构到目前为止已经是很大型的架构了,但是随着业务的发展,将来还会有更多的问题需要我们去解决,然后不论怎么发展,其实要决绝的问题还是一致的。始终是在解决各种性能问题。只要找到问题的关键,进而设计架构,发展技术,相信未来互联网将会越来越强大。

想要学习Dubbo框架、zookeper基本原理、redis分布式缓存、JVM性能优化,Nginx+apache+Tomcat集群部署、大数据hadoop,Hbase实时计算spark、storm、数据分析分词和权重等核心技术;需要的可以关注之后私信哈,记得要点赞转发噢!!!

BAT互联网公司的程序员,应用程序架构思路,这些都懂?相关推荐

  1. 程序员加油站,不是人人都懂的学习要点

    原文地址:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=210257&reltid=209928&pre_thr ...

  2. 从程序员到项目经理(5):程序员加油站,不是人人都懂的学习要点

    转自:http://blog.jobbole.com/29411/ 学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆 ...

  3. 从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!

    如何从程序员进阶到架构师?今天完整的把我积累的经验和技能分享给大家! 作者:陈睿|优知学院创始人 数据结构+算法=程序 数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及 ...

  4. 天天说架构师,到底什么样的程序员能称为架构师?

    2019独角兽企业重金招聘Python工程师标准>>> 我曾问过很多自称热爱代码的程序员的发展规划,大多都回答说期望成为一名架构师.而在招聘一方,有的团队会过滤掉多次提起架构一词而一 ...

  5. 到底什么样的程序员能称为架构师?

    我曾问过很多自称热爱代码的程序员的发展规划,大多都回答说期望成为一名架构师.而在招聘一方,有的团队会过滤掉多次提起架构一词而一点不提具体内容的简历.可见,虽然在大多数程序员眼里,架构师是神圣的,但又不 ...

  6. 从Java程序员进阶到架构师,6大核心技能要领详解

    " java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计. 希望能真正帮助到从程序员进阶到架构师之路的朋 ...

  7. Java程序员怎么迈向架构师

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题. ...

  8. 每个程序员都有的经历:从程序员到高级架构师,必须经历的三个阶段

    程序员是我们国家一个庞大的群体,每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来.今天给大家分享的是一篇来自腾讯C/C++ ...

  9. 程序员到高级架构师,必须经历的三个阶段

    摘要: 每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来. 每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是 ...

  10. C++ 程序员到高级架构师,必须经历的三个阶段

    摘要: 每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来. 每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是 ...

最新文章

  1. reboot 百度网盘资源
  2. H5画布不显示图片的问题解决
  3. 数据增强之图像旋转及坐标对应(附代码)
  4. QMsgPack的用法DEMO
  5. mysql mysql常用的常用函数
  6. Mysql 常用函数总结
  7. ASP.NET中实现MSN通知消息功能
  8. 痛心!Pandownload开发者被抓!我终于决定使用Docker搭建一个多端同步网盘!
  9. CraftAR入门教程
  10. mysql建用户之后取消drop库权限
  11. 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)
  12. man exportfs(exportfs命令中文手册)
  13. STM32系统框图学习笔记
  14. 3dmax如何使用模型快速切片命令
  15. AOP之基于Schema配置总结与案例
  16. C#开发实战1200例(第I卷)目录
  17. TCP 握手没成功怎么办?
  18. PLC通讯实现-C#实现西门子PLC以太网通讯Sharp7(六)
  19. 用墨刀设计原型,易被忽略的8种玩法。
  20. EOS测试链加入流程(代码版本与主网同步)

热门文章

  1. 非常详细的SIP协议总结
  2. 贵金属白银实时走势图——解读要领
  3. acm2015北京区域赛游记
  4. Android app获取短信验证码,并自动填充
  5. 投影仪幕布增益_钱别瞎乱花 家用投影幕布应该怎么选?
  6. PADS-Layout学习笔记
  7. 科普:什么是ChatGPT?
  8. 软件测试响应时间原则,性能测试二八原则,响应时间2/5/8原则
  9. 【雕爷学编程】Arduino动手做(47)---七段LED数码管模块
  10. windows10 安装linux,windows 10安装linux(ubuntu)子系统