大型网站技术架构——知识总结

1,网站价值在于能给用户提供什么,而不在于它是怎么做的。 2,在网站还很小时,就追求网站的架构是舍本逐末。 3,不要为了技术而技术。 4,计算机的任何问题都可以通过增加一个虚拟层来解决。网络的七层,每一层都可以看作是下一层的虚拟层,操作系统可以看作硬件的虚拟层,java虚拟机可以看作是操作系统的虚拟层。 5,Nosql数据库产品都放弃了关系数据库的两大重要基础: 以关系代数为基础的结构化查询语言(sql)和事务一致性保证(acid)。而强化其他一些大型网站更关注的特性: 高可用性和可伸缩性。 6,软件架构师最大的价值不在于掌握多少先进的技术,而在于具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向的基础技术模块。这种能力一部分源自专业的技术和经验,还有一部分源自架构师对业务场景的理解、对人性的把握、甚至对世界的认知。 7,大型系统常有四个问题,编译部署难,代码分支管理困难,数据库连接耗尽,新增业务困难。解决方案就是拆分,纵向拆分指讲一个应用拆成多个小应用,横向拆分就是分布式。 8,一个网站资深架构师曾说过:在互联网公司呆一年,相当于在传统软件公司呆三年。他的意思大概是在互联网公司一年遇到的问题比传统软件公司三年遇到的问题还多。而且随着网站业务的快速发展,问题也层出不穷,每年遇到的问题都不同。遇到问题,解决问题,经历了这个过程,技术才能升华,人和技术才能融为一体,才知道什么技术是真正有用的,什么技术是花拳绣腿。   这书挺有意思,可以让人对架构有整体认识,作者也很幽默,书是13年出版的,目前20年了没有再更新,如果更新了,我会再读一遍的。我只记录了自己感兴趣的点,
详细笔记点我参考。   附上一段关于
架构发展的简单梳理:   准备工作:
MAVEN详解
JDBC详解  
架构发展: 1、单机。 2、应用服务器和数据库分离。 3、应用服务器再分集群。(负载均衡策略5种;调度算法10种;集群模式3种;session共享4种方案) 4、数据库再读写分离。(mysql主从;中间件)   架构细节: 5、搜索引擎缓解读压力:
mysql索引 (扩展:
mysql三种存储引擎 
注意:同一个数据库也可以使用多种存储引擎的表。
如果一个表要求比较高的事务处理,可以选择InnoDB。
这个数据库中可以将查询要求比较高的表选择MyISAM存储。
如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎  
6、缓存环境读压力:应用层和数据库层的nosql(除了加速,专门放key-value这类数据);

                                  页面缓存(cookie)。

    

7、数据库垂直分和水平分:

       7.1 根据业务垂直分。(需要join数据库查询时,可用mycat,但据说效果不好也没人维护)

       7.2一个表数据水平分给几个库。(sql路由、主键、分页这些问题,也可以通过mycat解决)
 
8、根据业务拆分应用:
  举个例子,业务123都有各自集群,如果业务2、3都用到了1,会有重复代码问题。所以有了
SOA架构,面向服务,很多业务庞杂的传统公司都这样架构,根据业务功能拆分模块,模块间用接口通信,旧的项目在用webservice,新一点的进化到dubbo,现在大家都在向微服务转 springcloud

      
可是,SOA架构,如何远程调用?答案是
消息中间件