微服务解决了什么问题
引语:学习了沈剑老师的《微服务架构究竟解决了什么问题》课程,记录一下学习笔记。现在基本上互联网公司招人就是问微服务,那么为什么要用微服务架构?它究竟解决了什么问题?有什么好处和缺点呢?课程里有一句话很有感触就是不能大家都在用什么技术你就要用什么技术,应该是要了解它的优势和缺陷,对于合适的场景使用合适的技术架构。
传统互联网架构的问题先看下典型的互联网架构。
方式一:从客户端到反向代理,再到高可用的web集群,web服务在直接访问db集群。方式二:应用服务和dao,数据库都放在同一台服务器上
然后这样的结构是会产生一些问题,如下:
痛点一:代码到处拷贝这种问题很多公司估计都存在,业务线A,B,C都会有用户服务,然后每个业务线有一些个性化的需求,可能A业务先写了一套用户服务的代码,这个时候业务线B也需要用户服务可能就是直接拷贝过来A的代码。然后自己做一些修改。然后再来个业务线C可能也是如法炮制。这样用户服务就有了三份,而且代码还做了不一样的优化和修改。这样其实用户服务的代码就没有被复用起来,而且假设后面用户服务要统一起来做成一套,那每个业务线因为做了自己的个性化修改,其实重构也是很 ...
大型网站架构法阵历程学习
大型网站技术架构的演变历程
最新看了《大型网站技术架构》的一些内容,记录一下网站演变的进程和一些感悟。
演进历程:1.初始阶段的网站架构这种网站的初创时期,一台服务器就充当了所有的角色,应用程序,数据库,文件等内容都部署在上面,很多个人开发者可能也就是这样部署的,还有可能媒体文件也是放到数据库里面的。流量不大,所以也没什么压力和问题。
2.应用服务和数据服务分离随着网站的发展,我觉得这个确实是必然的,书中也说了对于应用服务器和数据服务器,服务器的硬件需求其实是不一样的。应用服务器需要大量的计算,提供稳定的服务,需要高性能的CPU,这里我觉得可能也需要较大的内存,毕竟各种计算的中间结果和处理流程都是在内存中完成的。对于数据服务器那磁盘一定是得够大,对应的取数据的话就会需要较大的内存。文件服务也是和数据服务器类似。对于某些情况如果服务要一直稳定运行下去,数据又是会不断的增长的话,数据服务和文件服务需要有GC的机制,自动定期的清理过期的数据。
3.网站使用缓存一开始可能要缓存的数据都是放在内存中,但是如果数据量大起来对于应用服务器的内存还是有一定压力的既要完成服务的运算,又需要保存大量的缓存 ...
自动化上线架构设计
创业公司自动化上线的架构
晚上听了58沈剑老师的自动化上线的课程的一些分享,记录下笔记和一些思考,这要是讲了从创业公司的手动发布到自动化发布的架构和设计。
1.起源问题的提出:如何把新系统发布到线上?
不同公司的阶段有着不同的策略和方式如下图:对于创业公公司来说对于研发工程师往往是多面手,很多时候部署就是自己操作的。发布代码非常繁琐和麻烦,工程师会花费大量的时间在这些重复性的劳动上面。这里就是问题的所在,应该解放工程师去做更多有意义的事情,从重复性劳动中解脱出来。
2.创业公司会遇到的困难困难如下图:创业公司可能技术栈比较单一,语言这方面不会太多,但是沈老师说的领导不重视这一点倒是很有可能发生。上头只看结果,不在意系统发布怎么快怎么优化,这时候应该负责任把方案拿出来,说可以用很少的时间,很大的提高研发的开发效率,这个时候可能才会比较容易争取到上司的同意和资源协调。具体可以列举的理由(自动化发布要实现的功能):1.解决大部分需求2.支持多语言3.支持多类型上线:web,service4.支持多框架上线5.可以定制化6.能够快速落地
3.自动化上线实践3.1 抽象集群:前提需要抽象集群,集 ...
mysql分区表的四种类型
mysql分区表四种类型分区表的类型mysql分区表总共有四种类型range,list,key,hash,这四种方式使用的最多的是range的方式。partition分区子句中可以使用各种函数,但是partition表达式里面返回的值必须是 一个确定的整数,且不是一个常数。可以对字段使用year(),to_days()函数将字段转化为整数。
range类型基于属于一个给定连续区间的列值,把多行分配给分区。一般会使用时间的字段来作为分区的列,记录每天的数据。
123456789101112CREATE TABLE range_table ( id INT NOT NULL, user_name VARCHAR(50) NOT NULL, date_create DATETIME NOT NULL, PRIMARY KEY (`id`,`user_name`,`date_create`)) partition by range columns(date_create)(partition p01 values ...
mysql索引笔记
索引存储:一个页默认是16KB8(放数据的)+6(放置指针的) = 14B16 * 1024 / 14B = 1170 (一个页可以放大概1170个索引)
1170117016 大概两千万,也就是说三层的b+tree可以放两千万的索引。
myisam引擎:frm文件:表结构MYD文件:表数据MYI文件:表索引
innodb引擎:
mysqljoin算法
mysqljoin算法
算法类型:
1.Nested-Loop Join Algorithm
2.Block Nested-Loop Join Algorithm
1.官网join算法描述
mysql索引策略
引语: 最近看了《高性能mysql》,虽然还没看完,但是觉得确实写得挺好的。索引部分看完还是对自己创建索引和了解 mysql的索引运行原理有了很大的帮助。做了些关于索引的笔记,遇到问题的时候可以回溯下参考下。
1.索引的优点:要是对mysql索引的基本概念还不太清楚的话,可以看下我之前的两篇博客。mysql聚簇索引和非聚簇索引,大白话btree和b+tree。
1.1 索引大大减少了服务器需要扫描行的数量1.2 索引可以帮助服务器避免排序和临时表1.3 索引可以随机I/O变为顺序I/O
2.使用索引的策略2.1 独立的列查询时索引列要是独立的列,指的是索引不能是表达式的一部分,也不能是函数的参数错误例子:
select user_id from user where user_id + 1 = 7; 这里完全可以写成user_id = 6,这样索引才会生效2.select * …where to_days(current_date)-to_days(date_col) <=10注:如果把索引的列,像上面的例子中where后面 ...
mysql该不该使用分区表
什么时候使用分区表?使用分区表的场景:1.表非常大,热点数据只在表的最后部分,其他部分都是不常用的历史数据2.想批量删除大量数据,此时可以使用分区表,单独删除某些不在使用的分区3.分区表的数据可以分布在不同的物理设备上,从而高效的利用多个硬件设备4.可以使用分区表来避免某些特殊的瓶颈,比如innodb的单个索引的互斥访问,ext3文件系统的inode锁竞争等5.需要备份和恢复独立的分区的时候,这个在大量数据集的场景下效果非常好
分区表的类型分区表的类型总共有四种range,list,key,hash,但是partition的表达式返回的值必须是整数,且不能是一个常数。如果不是用常数,使用的varchar,datetime类型的数据的话。会报错,报错信息大概长这样:
11659 - Field 'xxx' is of a not allowed type for this type of partitioning
分区表的使用下面我们以range分区为例看一下,分区表的用法:1.测试添加分区和删除分区
添加删除range分区(1)创建一个分区:
1234567891 ...
刷新-读书笔记1
《刷新》读书笔记1
萨提亚·纳德拉是微软的第三代CEO,《刷新》是他写的一本书介绍了他的生平生活上的一些事迹和在微软进行改革的事情。下面是看书的一些读书笔记,目前看完了前3章,总共9章。
原文:萨提亚出生于印度的海得拉巴(Hyderabad),那里被誉为印度的硅谷。他在印度接受大学教育后,在21岁生日那天赴美国留学,攻读计算机硕士学位。之后他于1992年到微软工作,在工作期间,又攻读了芝加哥大学商学院的在职MBA(工商管理硕士)项目。在微软工作22年后,这位印度移民被微软董事会任命为第三任首席执行官。笔记:1967年出生,21岁也就是1988年读硕士,1992年25岁进入微软,工作期间攻读MBA,2014年47岁接手微软成为第三任CEO。在微软待了22年真的算是元老级员工了,首先是技术人员,后来变成了管理者,工作期间攻读了MBA,感觉作为技术人员是可以多了解下其他方面的知识,特别是要以后做管理层。
原文:萨提亚着重讲了三个技术:混合现实(mixedreality)、人工智能、量子计算(quantum computing)笔记:感觉这些应该都是未来的方向,前两个知道,量子计算真的是不 ...