自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SeanTandol的博客

技术博客

  • 博客(73)
  • 资源 (9)
  • 问答 (3)
  • 收藏
  • 关注

原创 zookeeper总结

zookeeper是什么分布式数据一致性的解决方案zookeeper主要功能类似于文件系统的节点存储和查询功能,且写入节点保证数据的一致性能够监听节点的数据变化,接收变更的通知基于以上两点功能,实现负载均衡、分布式锁、master选举、分布式队列、配置中心等zookeeper的特性顺序一致性:客户端发起的事务,会严格根据顺序逐一执行原子性:所有机器的数据处理结果是一致的,要么...

2019-05-07 14:45:59 410

原创 dubbo详解

dubbo是什么dubbo是一个高性能轻量级开源的RPC框架。主要功能分为三点:提供面向接口的远程方法调用负载均衡和智能容错以及服务的自动注册和发现什么是RPC及其原理RPC:部署在不同的机器的服务需要进行方法调用,通过RPC具体的实现则可以完成远程过程的调用,而不需要具体了解协议原理:在客户端的底层和服务端的底层分别进行封装,客户端调用客户端的封装模块,找到服务端的地址,并进...

2019-03-15 16:25:48 1995

原创 Spring Cloud(Spring复习四)

文章目录1. Spring Cloud之Eureka2. Spring Cloud之Feign3. Spring Cloud之Ribbon4. Spring Cloud之Hystrix5. Spring Cloud之Zuul6. Spring Cloud之Bus7. Spring Cloud之Config1. Spring Cloud之Eureka作用:将应用根据不同的功能划分成不同的服务,...

2019-02-25 14:42:03 1226

原创 Spring Boot(Spring复习三)

文章目录Spring Boot的优点Spring Boot自动配置的原理如何创建一个Spring Boot项目Spring Boot项目整合Mybatis发布到独立的Tomcat运行读取application.yml或者application.properties配置文件的方式Spring Boot的优点内嵌了tomcat服务器,能够快速启动,方便开发人员开发调试采用自动配置的方式,相对于...

2019-02-20 15:42:17 268

原创 Spring MVC(Spring复习二)

文章目录Spring MVC是什么Spring MVC请求的流程Spring MVC与Struts2的区别参考Spring MVC是什么是一个简化web应用开发的框架,将Modle、Controller和View进行分离,把复杂的逻辑拆分开来,方便开发人员配合开发Spring MVC请求的流程用户发送请求至前端控制器DispatchServlet根据请求的映射从HandleMappin...

2019-02-19 20:17:22 307

原创 Spring(Spring复习一)

文章目录1. Spring是什么2. Spring的优点3. Spring的AOP理解4. Spring的IOC的理解5. BeanFactory和ApplicationContext有什么区别6. bean的作用域7. Spring如何保证线程安全8. Spring中使用的设计模式9. 事务的传播行为10. Spring AOP中的名词解释参考1. Spring是什么Spring是一个轻量级...

2019-02-19 17:03:25 274

原创 Java I/O(Java复习四)

常用的IO类IO与NIO的区别NIO的实现方式

2019-02-19 11:54:24 247

原创 Java虚拟机(Java复习三)

集合集合分类List:有序的,可重复ArrayList:底层数据结构是数组,查询快,增删慢;原因是查询可直接定位到每一元素,而增删可能需要遍历所有元素;扩容相对消耗资源,原因是,需要创建一个新的数组,并将原有的元素复制到新数组中,故使用ArrayList时最好先确定其容量大小。LinkedList:1.7之前底层数据结构是循环双向链表,查询慢,增删快;原因是链表定位某一元素可能需要遍...

2019-02-18 20:49:48 319

原创 Java并发(Java复习二)

线程安全线程生命周期主要分为5个部分,新建、就绪、运行、阻塞和结束新建后通过start方法进入就绪阶段就绪阶段通过CPU抢到执行权进入运行阶段运行阶段遇到IO阻塞,线程等待方法,wait方法或者互斥锁进入阻塞阶段阻塞阶段通过相应的解除阻塞方法,如等待时间结束,被唤醒方法和抢到锁进入就绪阶段运行阶段进入结束阶段,通过运行结束或stop方法线程的常用实现方式通过继承Threa...

2019-02-18 10:55:57 273

原创 Java容器(Java复习一)

集合集合分类List:有序的,可重复ArrayList:底层数据结构是数组,查询快,增删慢;原因是查询可直接定位到每一元素,而增删可能需要遍历所有元素;扩容相对消耗资源,原因是,需要创建一个新的数组,并将原有的元素复制到新数组中,故使用ArrayList时最好先确定其容量大小。LinkedList:1.7之前底层数据结构是循环双向链表,查询慢,增删快;原因是链表定位某一元素可能需要遍...

2019-02-18 10:52:20 333

原创 网易互联网&雷火&互娱22届校招及社招内推

一、网易互联网内推时间:6.29-9.16内推对象:2022届毕业生技术岗内推优势:优先筛选简历内推步骤:点击链接获取专属内推码 [网易】2022届网易互联网校园招聘内推开始啦!给你分享我的专属内推邀请函:https://bole.campus.163.com/#/app/index?projectId=39&type=7&boleId=1d72cf890ea49993&boleType=2&signature=950cf6af6f78e1fe102acd1a4

2021-08-09 18:54:22 1426 1

原创 Redis数据结构

文章目录常用数据结构简单动态字符串(SDS)链表字典跳跃表整数集合压缩列表对象对象概述字符串对象列表对象哈希对象集合对象有序集合对象常用数据结构简单动态字符串(SDS)结构:struct sdshdr{ // 记录buf中已使用的字节数量,也是字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];};相较于C字符串的优势:常数复杂度获取字符串的

2020-11-26 15:52:53 263

原创 Spring源码相关问题

文章目录容器启动过程循环依赖问题Bean生命周期BeanFactoryPostProcessorBeanPostProcessorBeanFactory与FactoryBean区别参考容器启动过程循环依赖问题循环依赖问题:A对象依赖B,B对象也依赖A解决循环依赖的核心思想是提前曝光流程:通过构建函数创建A对象(A对象是半成品,还没注入属性和调用init方法)。A对象需要注入B对象,发现缓存里还没有B对象,将半成品对象A放入半成品缓存。通过构建函数创建B对象(B对象是半成品,还

2020-11-19 11:20:56 291

原创 JVM线上问题排查

文章目录CPU问题原因一:代码无限循环原因二:IO阻塞原因三:死锁原因四:GCGC内存内存溢出内存泄漏工具Arthasjmapjstatgc 日志CPU问题问题排查查看服务器整体和进程的CPU使用情况,若服务器和java进程的CPU较高,则可判断为CPU问题# top命令查看CPU和内存的使用情况toptop命令的用法Linux top命令详解通过 arthas (阿尔萨斯) 工具查看CPU占比较高的线程# 查看CPU占比前3的线程thread -n 3原因一

2020-09-23 11:07:44 579

原创 kafka大全

文章目录kafka 作用kafka 相较其他mq特点kafka相关概念kafka存储机制kafka消息结构和分区规则kafka多副本机制zookeeper在kafka中的作用kafka如何保证消息消费顺序kafka如何保证消息不丢失kakfa如何保证消息不被重复消费kafka如何处理消息堆积kafka 作用异步处理服务解耦流量控制日志收集用户活动监测流式处理kafka 相较其他mq特点性能更优,能够支持每秒十万级的消息兼容性更好,尤其是在大数据和流计算领域但是对mqtt

2020-08-26 15:39:56 241

原创 java基础复习

文章目录javajava基础java在DOS中编译和运行关键字thisstatic关键字final关键字注意事项:数据类型思考题和面试题字符串面试题1:面试题2:面试题3:面试题4:Integer面试题1:运算符赋值运算符位运算方法java内存分配成员变量和局部变量区别构造方法代码块执行顺序方法重写和方法重载的区别继承继承的好处继承的弊端继承的成员关系多态多态中的成员访问特点多态继承中的内存图解多态中的对象变化内存图解面试题抽象类抽象类的特点抽象类的问题接口接口的成员特点类与类,类与接口,接口与接口内部类内

2020-08-17 11:41:18 235

原创 java 多线程轮流打印数字

方法一:通过 synchronized 锁和 wait notify的方式实现 public class ThreadTest { // 方式一,通过 synchronized 锁和 wait notify的方式实现 public static void main(String[] args) { // 当前需要执行线程编号 0 1 2 AtomicInteger executeThreadNo = new AtomicInteger(0);

2020-08-13 09:54:11 508

原创 Postgresql 行转列两种简单方法

数据准备CREATE TABLE tb_student_score( name varchar, course varchar, score int);INSERT INTO tb_student_scoreVALUES ('张三', '数学', 83);INSERT INTO tb_student_scoreVALUES ('张三', '英语', 93);INSERT INTO tb_student_scoreVALUES ('张三', '语文', 80);INSER

2020-08-10 11:51:59 1778

原创 k8s快速入门使用指南教程

文章目录概念常用命令配置清单通用数据PodPod的生命周期Pod的配置清单控制器控制器常用类别ReplicatSet的配置清单Deployment的配置清单DemanSet的yaml定义Service相关概念配置清单存储卷存储卷分类常用存储卷hostpath配置清单nfs配置清单pv/pvc配置清单ConfigMap应用方式环境变量的配置清单(只在Pod启动时有效,不会重载)文件内容的ConfgM...

2020-04-28 17:12:46 5218

转载 Spring Boot 自定义错误页面

使用Spring Boot构建的WEB应用可以很方便的打成jar包发布,也可以打成war包发布到应用服务器中。自定义错误页面在这两种发布方式下是不一样的。jar包中自定义错误页面创建Spring Boot项目,默认打包方式是jar,内部使用内嵌tomcat等servlet容器最简单的方式是直接在resources/templates目录下创建error.html页面,此时如果访问不存在...

2020-04-02 14:02:38 438

原创 Docker快速入门使用指南教程

文章目录定义和用处概念安装和配置使用网络模式定义和用处定义Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。用处隔离性轻便,便于维护管理弹性,同时起用多个可复用镜像概念镜像**Docker 把应用程序及其依赖,打包在 image 文件里面。**只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Do...

2020-04-01 11:16:10 257

原创 K8s 阿里云教材

1.为什么要开设云原生技术公开课

2020-03-19 17:04:36 398 1

原创 elastic-search入门教程总结

文章目录安装概念分词解析器restful调用调用插件集群使用JAVA API调用Spring-data-elasticsearch原理数据库和elastic-search性能对比参考安装下载压缩包 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip解压Windows,执行解压后bin目录...

2019-07-22 17:06:26 562

转载 request获取上下文路径、URL、URI、Servlet路径等方法

String getContextPath():返回上下文路径,例如:/helloString getQueryString():返回请求URL中的参数,例如:name=zhangSanString getRequestURI():返回请求URI路径,例如:/hello/oneServletStringBuffer getRequestURL():返回请求URL路径,例如:h...

2019-06-06 11:20:52 2387

原创 java获取路径的各种方式

文章目录1. java获取路径2. jsp中取得路径:3. 在类中取得路径:4. 在Servlet中取得路径:1. java获取路径利用System.getProperty()函数获取当前路径:System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径 使用File提供的函数获取当前路径:File ...

2019-06-05 11:15:32 3376

原创 数据库分库分表、读写分离

文章目录拆分方式拆分带来的问题主从同步配置原理binlog格式延时问题Mycat应用实战拆分方式垂直拆分:垂直地拆分一张表,在表的列层面切分一张表水平拆分:水平地拆分一张表,在表的行层面拆分一张表拆分策略:一致性hash方式(可以为主键):数据分布在分库分表中分布均匀,但是基于范围查询性能较低日期时间方式:实际也算是一种范围方式的拆分方式范围方式:数据可能在某几个分库分表中集中...

2019-05-23 17:05:52 312

转载 Linux curl wget 不验证证书进行https请求

$ wget ‘https://x.x.x.x/get_ips’ --no-check-certificate$ curl ‘https://x.x.x.x/get_ips’ -k

2019-05-21 11:28:03 3456

转载 服务端高并发分布式集群架构演进演变之路

目录1. 概述2. 基本概念3. 架构演进3.1 单机架构3.2 第一次演进:Tomcat与数据库分开部署3.3 第二次演进:引入本地缓存和分布式缓存3.4 第三次演进:引入反向代理实现负载均衡3.5 第四次演进:数据库读写分离3.6 第五次演进:数据库按业务分库3.7 第六次演进:把大表拆分为小表3.8 第七次演进:使用LVS或F5来使多个Ngi...

2019-05-16 17:19:45 765

原创 dubbo实现及配置

dubbo 实现创建项目<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc...

2019-05-14 11:54:57 273

原创 分布式集群复习

1. 水平划分1.1 数据库切分方法和优缺点根据日期或ID分段切分优点:数据量相对可控,能够很好地扩容,增加节点,可直接增加缺点:热点数据集中,无法分散至不同分片根据hash函数求余进行切分优点:数据分布均匀缺点:扩容麻烦,需要rehash,需要对数据考虑平滑迁移1.2 数据库分库分表跨表查询,分页查询,聚合函数,排序等问题一般解决方式:当排序字段非分片字段时,...

2019-04-22 19:50:49 243

原创 mybatis复习一

文章目录1. mybatis与hibernate的区别2. mybatis的工作原理1. mybatis与hibernate的区别MybatisHibernate半自动ORM全自动ORM效率高效率低SQL,学习成本低HQL,学习成本高工作量相对较大工作量较小数据库移植性差数据库移植性好2. mybatis的工作原理Mybatis工作...

2019-03-25 14:21:07 287

原创 常用数据结构(算法复习一)

文章目录符号表链表实现无序符号表二分查找实现有序符号表二叉查找树2-3查找树红黑二叉树B+ Tree跳跃表hash表符号表特点:存储键值对的数据接口,可以支持快速查找,分为有序和无序,有序会有获取最大最小值,以及可以通过key快速定位到所在位置,但是插入相对较慢,需要维护顺序链表实现无序符号表特点:查询较慢,插入和修改相对快些实现逻辑:数据存储在链表中插入:重复覆盖,不重复,头...

2019-03-07 11:20:44 275

原创 排序(算法复习一)

文章目录选择排序冒泡排序插入排序希尔排序归并排序快速排序三向切分快速排序堆排序选择排序时间复杂度:N2N^2N2空间复杂度:1实现逻辑:把最小的数据依次往前放,第一遍找出第一小的数据,然后和第一个位置的数据互换,第二遍找出第二小的数据,和第二个位置的数据互换代码:public abstract class Sort&amp;amp;lt;T extends Comparable&amp;amp;lt;T&amp;amp;gt;&amp;amp;...

2019-03-06 14:23:37 223

原创 https原理详解

文章目录1.https作用2.https原理3.SSL握手过程3.1.客户端发送请求3.2.服务端回应3.3.客户端回应3.4.服务端回应4.SSL过程中如何保证公钥不被篡改5.数字证书和数字签名1.https作用Secure Hypertext Transfer Protocol(安全超文本传输协议),是在http协议基础上增加了使用SSL加密传送信息的协议,从而保证信息传输的安全性。2....

2019-03-01 14:13:22 411

原创 遗留问题

问题:spring bean生命周期,post servicespring boot自动配置原理和starter实现autowire和resource区别mybatis的#和$的区别hashmap什么情况出现线程不安全cpu高了之后怎么排查遇到过什么线上问题解决,jvm调优spring mvc请求流程spring5.0新特性jdk1.8新特性pg相对于mysql的优势js...

2019-02-28 20:29:57 353

原创 mysql 复习一

文章目录1. 数据库事物ACID(原子性、一致性、隔离性、持久性)2. 脏读、幻读、不可重复读3. 事物的隔离级别(读未提交、不可重复读、可重复读、可序列化读)4. MySQL遇到的死锁问题、如何排查与解决5. explain命令6. 索引类别(B+树索引、全文索引、哈希索引),索引的原理和使用场景7. 说说 SQL 优化之道8. 说说分库与分表设计9. 数据库的几大范式10. 存储引擎的 Inn...

2019-02-27 19:30:29 454

原创 activemq 复习一

文章目录1. activemq原理2. activemq消息持久化方式1. activemq原理生产者通过和activemq建立好的TransportConnection发送消息TransportConnection找到对应的RegionBrokerRegionBroker根据消息类型找到消息对应的区域RegionRegion会找到消息的目的地目的地会判断该消息是否需要持久化将消息...

2019-02-26 17:18:18 270

原创 redis 复习一

文章目录1. Redis 有哪些数据类型,可参考《Redis常见的5种不同的数据类型详解》2. Redis 内部结构3. Redis 使用场景4. Redis 持久化机制5. Redis 集群方案与实现6. Redis 为什么是单线程的7. 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级8. 使用缓存的合理性问题9. Redis常见的回收策略参考1. Redis 有哪些数据类型,可参考《Red...

2019-02-26 14:46:54 396

原创 常用加解密算法

文章目录分类对称加密之DES非对称加密之RSA签名算法之MD5分类对称加密:对称式加密方式对加密和解密使用相同的密钥。通常,这种加密方式在应用中难以实施,因为用同一种安全方式共享密钥很难。如:RC4、RC2、DES 和 AES 系列加密算法。非对称加密:非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时...

2019-02-13 16:40:15 1019

原创 JVM虚拟机(一):类加载过程

文章目录类加载过程加载链接初始化对象内存图类加载过程加载加载到内存将这些静态数据转换成方法去的运行时数据结构在堆中生成一个代表这个类的java.lang.Class对象,作为方法去类数据的访问入口链接将java类的二进制代码合并到JVM的运行状态之中的过程验证:确保加载的类符合JVM规范,没有安全的问题准备:正式为类变量(static变量)分配内存并赋初始值解析:虚拟机...

2019-01-28 16:05:46 228

elasticsearch-5.5.1.rar(包含elasticsearch-analysis-ik-5.5.1.zip中文分词解析器)

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

2019-07-22

分布式服务架构.原理、设计与实战 电子书高清

《分布式服务架构:原理、设计与实战》全面介绍了分布式服务架构的原理与设计,并结合作者在实施微服务架构过程中的实践经验,总结了保障线上服务健康、可靠的至佳方案,是一本架构级、实战型的重量级著作。   《分布式服务架构:原理、设计与实战》以分布式服务架构的设计与实现为主线,由浅入深地介绍了分布式服务架构的方方面面,主要包括理论和实践两部分。理论上,首先介绍了服务架构的背景,以及从服务化架构到微服务架构的演化;然后提出了保证分布式服务系统架构一致性的方案和模式,并介绍了互联网架构评审的方法论;zui后给出了一个简要的非功能质量的技术评审提纲。实践上,首先提供了一个互联网项目的性能和容量评估的真实案例,介绍了压测的方案设计和至佳实践,这些技术能够全面保证大规模、 高并发项目的一致性、可用性和高并发性;然后讲解了大规模服务的日志系统的原理、设计与实践,包括ELK等框架的特点和使用方式等,并介绍了当前流行的APM系统的设计与实现,主要包括调用链和业务链的跟踪与恢复,涵盖了线上应急和技术攻关的流程及重点,也结合服务化系统线上应急过程进行分析并总结了其中需要用到的Java虚拟机、Linux和定制化脚本等命令,这些命令都是每个开发人员都会用到的解决线上问题的利器;zui后,阐述了系统服务的容器化过程,并详细介绍了敏捷开发流程和实现自动化的常用工具等,让读者既能学到架构设计的基础理论,也能结合书中的原理、设计与方法论来解决大规模、高并发互联网项目中的现实问题。   无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理、技术总监,还是对于资深IT人士来说,《分布式服务架构:原理、设计与实战》都有很强的借鉴性和参考价值。 购买地址:https://item.jd.com/12222782.html

2019-04-11

大型网站技术架构:核心原理与案例分析-完整高清-书签全(良心保证!!!)

编辑推荐 本书作者是拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历程。 没有晦涩难懂的术语,没有诘屈聱牙的文句,没有故弄玄虚的观点…… 明明白白的语句,清清楚楚的文法,干净利落的建议——让读者直接体会网站架构的紧要处,不容马虎的关键点——这恰好是一个优秀的网站架构所必备的要素。 如果说“水不在深,有龙则灵”,那么对于想了解网站架构的读者而言,这本书恰好是“书不在多,有它则行!” 还犹豫什么呢? 名人推荐 开卷有益,大型网站的技水之道尽在于此。 ——支付宝研究员潘磊 本书集作者多年的架构设计经验,都是智慧的闪亮。 ——支付宝资深架构师王定乾 通俗易懂,最接地气的一本介绍互联 网架构的书籍。 ——IBM咨询经理种新华 行云流水的幽默文风,将现代大型互联网的内部要害一一庖解。 ——堆糖网技术合伙人曹文炯 通过总结成熟的技术和方案,带您一窥大型网站架构的全貌。 ——阿 里巴巴技术专家余俊 当应聘者人手一本此书的时候,阿 里、腾讯、京 东……的西试官们怎么办昵? ——Oracle资深工程师付银海 作为互联网应用的开发者、架构师和创业者,这本书一定不要错过。 ——拓维信息平台研发总监陈斌 互联网架构师们不可多得的一本技术参考书。 ——中兴通讯总工程师钱煜明 循序渐进,娓娓道来,语言生动,举重若轻。 ——阿 里云高级专家李文兆 媒体推荐 这是我看过的最接地气的一本介绍互联网架构的书籍,深入阐述了大型网站所面临的各种架构问题及解决方案,内容通俗易懂,而且对架构师的领导艺术进行了介绍,很值得从事互联网的技术人员学习和参考。 IBM咨询经理 种新华 此书读来亲切,能用不到300页的篇幅将网站架构的过去及未来说得如此通俗易懂,与作者多年的亲身实践分不开,并由此想到一个问题:当此书人手一本的时候,阿 里、腾讯、京 东……的面试官们怎么办呢? Oracle资深工程师 付银海 智慧同学,人如其名,在阿 里巴巴,人称“教授”,可见其博学多才。《大型网站技术架构:核心原理与案例分析》一书更是其多年积淀厚积薄发之作,涵盖构建大型互联网应用所需的关键技术,兼具实用性和前瞻性,无论是高并发、高性能还是海量数据处理、Web前端架构,都有针对性的解决之道。尤其难得的是此书还对架构师的内涵及技术管理有比较深刻地阐述,实在是同类书籍中难得一见的。作为互联网应用的开发者、架构师和创业者的你,一定不要错过本书,本书足以解决你的技术之忧。 拓维信息平台研发总监 陈斌 教授(本书作者在阿 里巴巴的昵称)曾在知名的大型互联网公司前线浴血多年,经验不可谓不丰富,然而更难得的是他不仅博闻强记,更用行云流水的幽默文风,将现代大型互联网的内部要害一一庖解。也许各家细节略有不同,但大部分的大型互联网站基本都可以用这样的视角去解读。相信本书不仅对程序员,甚至对很多架构师也有参考价值,尤其值得关注的是教授在书中颇多技术之外的考量思索,我愿意称之为互联网基因。 堆糖网技术合伙人 曹文炯 有幸拜读了这本《大型网站技术架构:核心原理与案例分析》,本书从多个层面说明了如何构建一个高可用、高性能、高可扩展性的网站系统,并结合了阿 里巴巴及其他互联网企业先进的架构实践经验进行案例分析,讲述非常全面且具指导意义。本书从网站的架构设计、快速开发、高效部署、业务监控、服务治理、运维管理等多个角度描述了架构设计的相关重点,涉及的核心技术包括前端优化、CDN、反向代理、缓存、消息队列、分布式存储、分布式服务、NoSQL存储、搜索、监控、安全等一系列保证大型网站安全可靠运行的关键技术点。本书还提供了网站如何从小型网站伴随用户成长,逐步扩展到大型网站的架构演进思路,是互联网架构师们不可多得的一本技术参考书。 中兴通讯总工程师 钱煜明 设计和规划一个网站的总体架构涉及方方面面的东西,备选的方案也很多,如何在五花八门,纷繁复杂的技术中构建最适合用户的网站架构,变成了一件极具争议和挑战性的工作。一个好的架构可以以很低的成本,在满足用户需求的同时,满足整个网站的架构灵活性;同样,一个糟糕的架构可能会让你的客户在花费了大量金钱后,得到一堆笨重、复杂且不切实际的东西,或是由于系统过于复杂,故障不断,或是由于架构不够灵活,阻碍业务的发展等等。 回顾网站架构的发展历程,我们可以发现任何大型网站架构的发展都非一蹴而就的,同自然界生物物竞天择的自然进化规律一样,大型网站的架构发展和演变也基本遵循着类似的规律。我们可能无法想象几年后网站架构的样子,因为在互联网行业快速变化的当下,你甚至很难准确地预测未来一年网站的产品演变方向,甚至网站流量规模。于是,产品设计师和工程师们提得最多的是迭代和演变,这在一个网站系统架构设计过程中显得尤为重要,因为我们永远无法像传统行业一样,去精确地估算,并按预先精确设计好的图纸去完成我们的产品。那是不是网站的架构设计和规划就毫无规律及章法可循了呢?答案显然不是,在互联网快速发展的今天,随着搜索引擎、电子商务、社交类等互联网产品逐步应用到每个人的身边,大型网站的架构及很多关键技术的发展,在逐步走向成熟。在构建一个大型网站过程中可能面临一些问题,人们正在尝试逐渐总结并积累出一些具有通用性的、经过验证的且成熟的局部解决方案,这也是本书将呈现给大家的内容。本书中,作者以自己多年大型互联网网站的架构经验,尝试总结当下这些互联网行业中相对成熟且经过大量案例检验的技术和方案。 相信通过阅读本书,您可以一窥大型网站架构的全貌。 阿 里巴巴技术专家 余俊 循序渐进,娓娓道来,语言生动,举重若轻。 阿 里云高级专家 李文兆 作者简介 李智慧 曾在阿里巴巴担任技术专家,参与阿里巴巴基础技术平台开发和www.alibaba.com架构设计。 目前就职英特尔亚太研发中心从事云计算与大数据方面的研发工作。 目录 第1篇概述 1大型网站架构演化2 1.1大型网站软件系统的特点3 1.2大型网站架构演化发展历程4 1.2.1初始阶段的网站架构4 1.2.2应用服务和数据服务分离4 1.2.3使用缓存改善网站性能5 1.2.4使用应用服务器集群改善网站的并发处理能力6 1.2.5数据库读写分离7 1.2.6使用反向代理和CDN加速网站响应8 1.2.7使用分布式文件系统和分布式数据库系统9 1.2.8使用NoSQL和搜索引擎10 1.2.9业务拆分11 1.2.10分布式服务11 1.3大型网站架构演化的价值观13 1.3.1大型网站架构技术的核心价值是随网站所需灵活应对13 1.3.2驱动大型网站技术发展的主要力量是网站的业务发展13 1.4网站架构设计误区14 1.4.1一味追随大公司的解决方案14 1.4.2为了技术而技术14 1.4.3企图用技术解决所有问题14 1.5小结15 2大型网站架构模式16 2.1网站架构模式16 2.1.1分层17 2.1.2分割18 2.1.3分布式18 2.1.4集群19 2.1.5缓存20 2.1.6异步20 2.1.7冗余21 2.1.8自动化22 2.1.9安全23 2.2架构模式在新浪微博的应用23 2.3小结25 3大型网站核心架构要素26 3.1性能27 3.2可用性28 3.3伸缩性29 3.4扩展性30 3.5安全性30 3.6小结31 第2篇架构 4瞬时响应:网站的高性能架构34 4.1网站性能测试35 4.1.1不同视角下的网站性能35 4.1.2性能测试指标36 4.1.3性能测试方法39 4.1.4性能测试报告41 4.1.5性能优化策略41 4.2Web前端性能优化42 4.2.1浏览器访问优化42 4.2.2CDN加速43 4.2.3反向代理44 4.3应用服务器性能优化45 4.3.1分布式缓存45 4.3.2异步操作52 4.3.3使用集群53 4.3.4代码优化54 4.4存储性能优化58 4.4.1机械硬盘vs.固态硬盘58 4.4.2B+树vs.LSM树59 4.4.3RAIDvs.HDFS61 4.5小结64 5万无一失:网站的高可用架构66 5.1网站可用性的度量与考核67 5.1.1网站可用性度量67 5.1.2网站可用性考核67 5.2高可用的网站架构69 5.3高可用的应用71 5.3.1通过负载均衡进行无状态服务的失效转移72 5.3.2应用服务器集群的Session管理73 5.4高可用的服务76 5.5高可用的数据78 5.5.1CAP原理79 5.5.2数据备份82 5.5.3失效转移84 5.6高可用网站的软件质量保证85 5.6.1网站发布85 5.6.2自动化测试86 5.6.3预发布验证87 5.6.4代码控制88 5.6.5自动化发布90 5.6.6灰度发布91 5.7网站运行监控91 5.7.1监控数据采集92 5.7.2监控管理93 5.8小结94 6永无止境:网站的伸缩性架构95 6.1网站架构的伸缩性设计97 6.1.1不同功能进行物理分离实现伸缩97 6.1.2单一功能通过集群规模实现伸缩98 6.2应用服务器集群的伸缩性设计99 6.2.1HTTP重定向负载均衡100 6.2.2DNS域名解析负载均衡101 6.2.3反向代理负载均衡102 6.2.4IP负载均衡103 6.2.5数据链路层负载均衡104 6.2.6负载均衡算法105 6.3分布式缓存集群的伸缩性设计106 6.3.1Memcached分布式缓存集群的访问模型107 6.3.2Memcached分布式缓存集群的伸缩性挑战107 6.3.3分布式缓存的一致性Hash算法109 6.4数据存储服务器集群的伸缩性设计112 6.4.1关系数据库集群的伸缩性设计113 6.4.2NoSQL数据库的伸缩性设计117 6.5小结119 7随需应变:网站的可扩展架构121 7.1构建可扩展的网站架构122 7.2利用分布式消息队列降低系统耦合性123 7.2.1事件驱动架构123 7.2.2分布式消息队列124 7.3利用分布式服务打造可复用的业务平台126 7.3.1WebService与企业级分布式服务128 7.3.2大型网站分布式服务的需求与特点129 7.3.3分布式服务框架设计130 7.4可扩展的数据结构131 7.5利用开放平台建设网站生态圈132 7.6小结134 8固若金汤:网站的安全架构135 8.1道高一尺魔高一丈的网站应用攻击与防御136 8.1.1XSS攻击136 8.1.2注入攻击138 8.1.3CSRF攻击139 8.1.4其他攻击和漏洞140 8.1.5Web应用防火墙141 8.1.6网站安全漏洞扫描142 8.2信息加密技术及密钥安全管理142 8.2.1单向散列加密143 8.2.2对称加密144 8.2.3非对称加密144 8.2.4密钥安全管理145 8.3信息过滤与反垃圾146 8.3.1文本匹配147 8.3.2分类算法148 8.3.3黑名单149 8.4电子商务风险控制150 8.4.1风险151 8.4.2风控151 8.5小结153 第3篇案例 9淘宝网的架构演化案例分析156 9.1淘宝网的业务发展历程157 9.2淘宝网技术架构演化158 9.3小结162 10维基百科的高性能架构设计分析163 10.1Wikipedia网站整体架构163 10.2Wikipedia性能优化策略165 10.2.1Wikipedia前端性能优化165 10.2.2Wikipedia服务端性能优化166 10.2.3Wikipedia后端性能优化167 11海量分布式存储系统Doris的高可用架构设计分析169 11.1分布式存储系统的高可用架构170 11.2不同故障情况下的高可用解决方案171 11.2.1分布式存储系统的故障分类172 11.2.2正常情况下系统访问结构172 11.2.3瞬时故障的高可用解决方案173 11.2.4临时故障的高可用解决方案174 11.2.5永久故障的高可用解决方案175 12网购秒杀系统架构设计案例分析176 12.1秒杀活动的技术挑战177 12.2秒杀系统的应对策略177 12.3秒杀系统架构设计178 12.4小结182 13大型网站典型故障案例分析183 13.1写日志也会引发故障184 13.2高并发访问数据库引发的故障184 13.3高并发情况下锁引发的故障185 13.4缓存引发的故障185 13.5应用启动不同步引发的故障186 13.6大文件读写独占磁盘引发的故障186 13.7滥用生产环境引发的故障187 13.8不规范的流程引发的故障187 13.9不好的编程习惯引发的故障188 13.10小结188 第4篇架构师 14架构师领导艺术190 14.1关注人而不是产品191 14.2发掘人的优秀191 14.3共享美好蓝图192 14.4共同参与架构193 14.5学会妥协194 14.6成就他人194 15网站架构师职场攻略196 15.1发现问题,寻找突破197 15.2提出问题,寻求支持199 15.3解决问题,达成绩效201 16漫话网站架构师203 16.1按作用划分架构师203 16.2按效果划分架构师204 16.3按职责角色划分架构师205 16.4按关注层次划分架构师205 16.5按口碑划分架构师206 16.6非主流方式划分架构师207 附录A大型网站架构技术一览208 附录BWeb开发技术发展历程215 后记218 序言 序 我为什么要写这本书 我想写一本关于网站架构方面的书源起于2011年年末至2012年年初发生的两件事。 2011年末,京东网图书促销,在打5折的基础上再满一百送一百,作为一个爱买书胜过爱读书的人,我对这种促销活动根本没有免疫力,于是兴致勃勃地在活动当天登录www.360buy.com,准备将收藏夹里的图书一网打尽。 往购物车里尽情地塞了一堆书后,点击“购买”按钮,但是浏览器迟迟没有响应,预感到京东的服务器可能因为并发访问量过高,超过了系统的最大负载能力,果然过了一会,浏览器页面显示“Service is too busy”。我不甘心,返回购物车页面继续点击“购买”按钮,浏览器继续显示“Service is too busy”。 于是我猜测:能够正常访问购物车,却不能成功购买,问题应该是出在订单系统,B2C网站生成一个订单需要经历扣减库存、扣减促销资源、更新用户账户等一系列操作,这些操作大多是数据库事务操作,没有办法通过缓存等手段来减轻数据库服务器负载压力,如果事前没有设计好数据库伸缩性架构,那么京东的技术团队将遇到一个大麻烦。 当天晚上,我登录新浪微博,看到京东的大老板刘强东发布了一条微博:“我已经紧急采购了10台服务器,增强网站后台,明天继续促销一天,一定让大家买到书”。即使在有成熟数据库伸缩性架构设计的前提下,进行一次数据库扩容也是件棘手的事,而京东只需要一个晚上就能搞定,让我对京东的技术实力刮目相看。 第二天一上班,我的第一件事就是登录www.360buy.com,点击“购买”按钮后悲剧地发现页面还是“Service is too busy”。当天晚上,刘强东又发布了一条微博:“请信息部的同事喝茶”。还配了一张照片:一张大桌子,只有一杯茶,旁边放了一把刀…… 我想京东信息部的同事绝对不是有意要捉弄他们的老板和客户,很可能是他们错误地判断了系统的瓶颈及伸缩性架构的困难,对老板做出了过度承诺,而这背后折射出的是他们对网站架构的本质缺乏了解。 另一件事发生在2012年年初,当时的中国铁道部官方售票网站www.12306.cn在春运期间因为大量用户访问而崩溃,无法有效访问。12306作为一个运营不久的网站,缺乏大规模并发访问处理的经验,遇到一些问题其实不奇怪,不管花多少钱,经验教训都需要经历时间和挫折才能得到。奇怪的是,12306的架构师似乎对这种可能发生的大规模并发访问产生的问题完全没有一点概念,系统好像根本没有经过任何高并发场景下的性能评估和性能测试,就那么干脆利落地崩溃了,趴在那里长时间起不来。 这两件事情促使我想写一本关于网站架构的书,阐述网站技术架构最基本的驱动力,基础的架构设计原理,以及架构方案选择的价值观。希望软件工程师们在解决问题之前,能够认真思考自己面对的真正问题究竟是什么,有哪些技术方案可以选择,其基本原理是什么。所以这本书里没有高深的算法和聱牙诘屈的公式,也很少有程序代码。读者可以把本书当作网站架构设计的科普书,即使对网站架构没有什么了解,也能够比较轻松地阅读。 在本书的写作过程中(2012年下半年),没有再看到京东促销宕机的新闻,12306也逐渐稳定成熟。我们虽然无法猜测京东“信息部的同事”和12306网站的工程师们付出了多少努力,但能在相对比较短的时间里解决这些技术问题,也说明了网站架构其实并不难,真正能解决问题的技术一定是简单的。 本书致力于把这些简单的技术和道理呈现给读者。 如何阅读本书 我自己读书不求甚解,遇到看不懂的地方就跳过去,但是希望作者对难点和重点能换个角度和方式在后面章节再叙述,以帮助我重新思考和认识前面不能理解的重要知识。 机械制图的时候,通常使用三视图描述一个机械零件,从正视、侧视、俯视三个角度对一个零件绘图,从而全面描述一个零件的结构。软件架构设计中常用的4+1视图模型,也是一种多角度描述软件系统设计的手段。 本书中,重要的架构原理和技术方案都采用多角度描述的方法。 第 1 篇,从演化、模式、要素三个维度描述网站整体架构。 第 2 篇,从性能、可用性、伸缩性、扩展性、安全这五个要素方面详细描述网站架构核心原理,其中重要的负载均衡、异步处理、分布式缓存等技术方案又在不同章节从多角度进行描述。 第 3 篇,通过几个具体案例再一次从整体和局部描述网站架构方法。 第 4 篇,从架构师做事的角度回顾网站技术架构,读者在阅读前面技术章节感到枯燥的时候,也可以跳到本篇休闲放松下。 阅读本书过程中有任何问题和建议,请联系作者。新浪微博:@大型网站技术架构。 致 谢 2012年五一节前夕,当我拜访博文视点的编辑胡辛征,商谈出版一本关于大型网站技术架构的图书时,没有想到自己面临的挑战是如此巨大。 整个图书写作过程就像喝醉了酒:头痛如裂,有很多话想说,但又不知该从何说起。 我很庆幸,这个过程有你们陪伴、支持、鼓励和帮助,是你们给了我继续前行的勇气。 感谢易普际的培训顾问周腾飞,策划并鼓励我去写这本书。 感谢阿里巴巴的技术专家余俊和何坤,这本书的大纲和结构就是和你们在钱塘江畔散步时聊出来的,但很遗憾最后没能成功蛊惑你们和我一起创作本书。 感谢阿里巴巴高级开发工程师熊红亮、丁夏珍;IBM咨询经理种新华、架构师吴业勇;百度产品经理王晟;Intel运维工程师Liu Gongmin给予的建议和鼓励。 感谢博文视点的编辑刘皎、郑柳洁,以及许多我不知道名字的编辑为本书最终出版付出的努力。 感谢阿里巴巴资深架构师潘磊、王定乾、钱霄、王齐,指引我进入网站架构的知识殿堂。 本书很多内容源自阿里同学们的知识库,原谅我无法一一致谢。 感谢我的妻子方芬香,你给予我一个新的世界,让我如此热爱生活。 文摘 推荐序一 传统的企业应用系统主要面对的技术挑战是处理复杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到。IT系统应用于企业管理已有超过半个世纪的历史,人们在这方面积累了大量的知识和经验(架构模式,领域分析,项目管理),而真正意义上大型网站从出现至今不过短短十多年的时间,很多技术挑战还在摸索阶段。市面上关于传统企业应用开发的书籍汗牛充栋,而真正能够深入全面地阐述大型网站技术架构的图书寥寥无几。所以很多人就很困惑:为什么很多看起来不是很复杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发呢? 值得庆幸的是,作者为我们带来了这本《大型网站技术架构:核心原理与案例分析》,比较全面地阐述了大型网站的主要技术挑战和解决方案。宏观层面上,将网站架构的演化发展、架构模式、核心要素一一道来;微观层面上,将网站架构常用的分布式缓存、负载均衡、消息队列、分布式服务、甚至网站如何发布运维都逐一进行了阐述。大型网站的技术之道尽在于此。 作者在阿里巴巴工作期间,一方面参与基础技术平台产品开发,一方面参与网站架构设计,这些经历使作者能够比较全面地从理论和实践两个视角去看待和描述网站架构。书中的技术内容基本都从为什么(Why)要这么做和如何去做(How)两个层面进行表述。读者可知其然并知其所以然。 阅读本书也许不能使你就此掌握大型网站架构设计的屠龙之术,但至少使你对网站架构的方法和思维方式能有全面了解。 开卷有益,应该指的就是这样的书。 支付宝研究员 潘磊 推荐序二 这些年互联网技术蓬勃发展,各种成熟的组件、工具、框架越来越丰富,各种理论逐渐发展成熟,各大公司公开的理论和实践资料也越来越多,在各个领域都有比较成熟的解决方案,但是研究领先互联网公司的架构,无论是Google、Facebook、Amazon还是淘宝、支付宝、腾讯、百度,都各有其独特的地方。 各个环节都有成熟的产品或者方案,为什么这么多互联网公司的架构还有如此明显的差异呢?是不是照着Google、Facebook、淘宝的架构做,就能做好一个“大型的互联网应用”呢? 正如本书中所言:“好的设计绝对不是模仿、不是生搬硬套某个模式,而是在对问题深刻理解之上的创造与创新,即使是‘微创新’,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解与把握。” 这些大型的互联网应用是设计出来的?还是演化出来的?在设计的过程中需要考虑哪些因素?演化过程中都会面临哪些问题,哪些挑战? 本书从性能、可用性、伸缩性、扩展性、安全性几个网站核心架构要素切入,全面地介绍了这些核心要素面临的问题域、理论基础及应对方案;对这几个方面进行系统地分析,结合目前成熟的解决方案,以及作者自己的工作经验,理论联系实际,踏实细致地提出合理的解决方案,非常值得我们学习和借鉴。 作者还通过对淘宝、Wikipedia、分布式存储系统、秒杀系统等案例的分析,仔细探讨了典型互联网架构的演进过程,剖析了分布式系统设计和实现中的挑战和解决方案,并研究了极端情况下,秒杀给网站带来的难以预计的瞬间高并发冲击的应对策略和架构设计。还通过一些实实在在发生过的故障案例分析,从另一个侧面来说明,我们在做技术架构时,需要考量的一些关键点,这些分享都是不可多得的血泪经验。 本书观点明确,涉及的问题域有针对性和全面性,对问题的分析过程清晰,提出的解决方案切实可行,充分结合了目前成功的互联网公司的架构经验,结合了作者丰富的工作经验,是一本值得行业内人士学习和关注的好书。 作者李智慧在互联网行业具有丰富的经验,在阿里巴巴工作的几年中担任架构师,参与过多个重要的项目和产品的架构设计,遇到和处理了很多复杂的问题,在这方面积累了大量的经验。本书是作者多年的架构师经历,以及时刻的思考和积累的结晶,一词一句都是经验之谈,都是智慧的闪亮。 感谢作者耗费精力给我们带来如此精炼而又内容丰富的一本好书。 支付宝资深架构师 王定乾

2019-03-26

JAVA加密与解密的艺术第2版(良心保证第二版)

JAVA加密与解密的艺术第2版(良心保证第二版),良心产品,良心保证是第二版,良心保证是完整版!

2019-02-13

计算机英语词汇表

计算机专业英语词汇指与计算机硬件、软件、网络等多方面有关的英语词汇,主要包括硬件基础、计算机系统维护、计算机网络基础、软件、程序设计语言、计算机网络技术、IT职场英语等词汇。

2019-01-23

计算机英语单词

计算机专业英语词汇指与计算机硬件、软件、网络等多方面有关的英语词汇,主要包括硬件基础、计算机系统维护、计算机网络基础、软件、程序设计语言、计算机网络技术、IT职场英语等词汇。

2019-01-23

linux学习资料

Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux发行版本,但它们都使用了Linux内核。 Linux内核网站:www.kernel.org 基于内核,再增加一些桌面,应用程序,就可以发行,称为开发版。

2019-01-10

Docker技术入门与实战.pdf

的虚拟化技术,能够一定程度上的代替传统虚拟机。不过,Docker 跟传统的虚拟化方式相比具有众多的优势。我也将Docker类比于Python虚拟环境,可以有效的配置各个版本的开发环境,比如深度学习与Java环境。 其他的Docker简介也不需要过多介绍,可以参考很流行的《Docker — 从入门到实践》。关于博客,文末列出了最近在 --------------------- 作者:等一杯咖啡 来源:CSDN 原文:https://blog.csdn.net/bskfnvjtlyzmv867/article/details/81044217 版权声明:本文为博主原创文章,转载请附上博文链接!

2019-01-04

Spring Cloud Dalston 中文文档 参考手册 中文版

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

2019-01-04

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除