自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 README

一步一步建立起分布式系统:SOA->微服务->云原生的一套完整技术栈.Java8 Lambda表达式 流操作(Stream) HashMap源码分析并发 并发编程的基础 synchronize volatile AQS底层原理分析 Condition及源码分析 CountDwonLatch及源码分析 Semaphore及源码分析 CyclicBarrie...

2020-03-24 09:00:30 337

原创 04-kube-scheduler-调度算法初始化-源码分析

kube-scheduler-调度算法初始化-源码分析经过前面的分析。我们对kube-scheduler的调度有了比较深入的了解。我们已知:预选(predicates):是通过预先加载好的预选函数依次过滤一个节点。优选(priorities):是通过预先加载好的fun或者map/reduce来对节点进行打分。那么这些函数是如何加载的呢?我们来详细分析一下。看下图:pkg/sched...

2020-03-24 08:57:48 487

原创 将博客搬至优快云

将博客搬至优快云

2020-03-17 14:25:54 267

原创 03-kube-scheduler-node优选-源码分析

kube-scheduler-node优选-源码分析Node优选入口函数前面在介绍pod调度的预选过程时,已经知道在pkg/scheduler/core/generic_scheduler.go的Schedule函数中经过findNodesThatFit预选函数计算后,通过预选通过的nodes会进入优选阶段。如下代码:func (g *genericScheduler) Schedule(...

2020-03-17 09:42:25 296

原创 01-Kubernetes-源码调试

Kubernetes-源码调试在进行源码调试之前需要预选搭建好一个k8s集群,无论是单节点,还是三节点的集群。这里推荐使用三节点。因为能更好的感受到k8s是如何运行的。具体的搭建步骤因为之前已经写过k8s的集群搭建,需要搭建集群的可以去参考:01-Kubernetes集群搭建.md概要将需要调试的组件从搭建好的集群中下掉,用本地代码运行代替被下掉的组件从而实现本地代码调试,这里举例是使用的...

2020-03-16 10:41:14 1316 3

原创 02-kube-scheduler-node预选-源码分析

kube-scheduler-node预选-源码分析简述pod调度的总体流程:本文只详细分析了上图中schedule算法计算合适的node中的一个步骤。当然也能看到整个过程,只是其他步骤没有深入进去分析。代码入口我们在之前,环境调试的时候看到过kube-scheduler代码的入口:kubernetes/cmd/kube-scheduler/scheduler.go,代码如下:fun...

2020-03-16 10:41:14 280

原创 01-Kubernetes集群搭建

01 搭建K8s集群[无需科学上网]官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectlGitHub:https://github.com/kubernetes/kubeadm课程中:使用...

2020-03-14 13:00:39 177

原创 01-服务治理之Apache Dubbo的基本认识

服务治理之Apache Dubbo的基本认识为什么要用Dubbo远程通信背景技术架构的发展从单体到分布式,是一种顺势而为的架构演进,也是一种被逼无奈的技术变革。架构的复杂度能够体现公司的业务复杂度,也能从侧面体现公司的产品发展势头是向上的。和传统的单体架构相比,分布式多了一个远程服务之间的通信,不管是SOA还是微服务,它们本质上都是对于业务服务的提炼和复用。那么远程服务之间的调用才是实现分...

2020-03-14 13:00:39 284

原创 02-Apache Dubbo的服务治理功能

Apache Dubbo的服务治理功能环境介绍zookeeper环境。在之前的文章中又介绍。参考链接。代码工程名:springboot-dubbo,github地址为:https://github.com/wenbin8/myCode/tree/master/springboot-dubbo工程使用SpringBoot继承Dubbo。其中springboot-dubbo-provide...

2020-03-14 13:00:39 197

原创 03-rabbitMQ可靠性投递与高可用

rabbitMQ可靠性投递与高可用可靠性投递在使用RabbitMQ实现异步通信的时候,消息丢了怎么办,消息重复消费怎么办?在RabbitMQ里面提供了很多保证消息可靠投递的机制,这个也是RabbitMQ的一个特性。我们在讲可靠性投递的时候,必须要明确一个问题,因为效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率造成影响。所以如果是一些业务实时一致性要求不是特别高...

2020-03-14 13:00:39 163

原创 02-Linux 网络基础(Network Namespase、veth pair、bridge、Iptables)

Linux 网络基础Network Namespase简单认识Linux的namespace(名字空间)的作用就是“隔离内核资源”。在Linux的世界里,文件系统挂载点、主机名、POSIX进程间通信消息队列、进程PID数字空间、IP地址、userID数字空间等全局系统资源被namespace分割,装到一个个抽象的独立空间里。而隔离上述系统资源的namespace分别是Mount namesp...

2020-03-14 13:00:39 1381 3

原创 01-软件设计的七大原则

软件设计的七大原则开闭原则​ **开闭原则(Open-Closed Principle, OCP)是指一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。**开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,可以尽...

2020-03-14 13:00:39 205

原创 netty-组件与源码分析

Netty-组件Bootstrap-引导​ 引导类的层次结构包括一个抽象的父类和两个具体的引导子类,如图所示。​ 服务器致力于使用一个父Channel来接受来自客户端的连接,并创建子Channel以用于它们之间的通信;而客户端将最可能只需要一个单独的、没有父Channel的Channel来用于所有的网络交互。​ 两种应用程序类型之间通用的引导步骤由AbstractBootstrap...

2020-03-04 14:39:26 356

原创 01-Linux中常用网络命令

Linux中常用网络命令设置网络参数的命令配置IP参数与启动、关闭网络接口Ifconfigifupifdown修改路由:route网络参数综合命令:ipDHCP客户端命令:dhclient排错与查看命令ping主机间各个节点分析:traceroute查看本机网络连接与后门:netstat检测主机名与IP的对应:host\nslookup数据包捕获功能命令行数据包捕获器...

2020-03-03 04:24:45 109

原创 04-Redis集群

Redis集群为什么需要Redis集群性能Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的 Redis 服务来完成工作。扩展第二个是出于存储的考虑。因为Redis所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法。可用性第三个是可用性和安全的问题...

2020-03-03 03:53:00 331

原创 05-Redis实战

Redis实战Redis客户端客户端通信原理客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF 回车+换行)结尾。如果使用 wireshark 对 jedis 抓包:环境:Jedis 连接到虚拟机 202,运行 main,对 VMnet8 抓包。过滤条件:ip.dst==192.168.8.2...

2020-03-03 03:53:00 199

原创 03-Redis进阶

Redis进阶发布订阅模式列表的局限前面我们说通过队列的 rpush 和 lpop 可以实现消息队列(队尾进队头出),但是消费者需要不停地调用lpop查看List中是否有等待处理的消息(比如写一个while循环)。 为了减少通信的消耗,可以sleep()一段时间再消费,但是会有两个问题:如果生产者生产消息的速度远大于消费者消费消息的速度,List会占用大量的内存。消息的实时性降低。...

2020-03-03 03:53:00 94

原创 微服务的发展

微服务的发展从单体架构到微服务单体架构任何一个网站在发布初期都不能立马就拥有庞大的用户流量和海量数据,都是在不停的试错过程中一步一步演变其自身架构,满足自身业务。比如现在能够抗住双十一这么大流量的淘宝,它的技术最早用的LAMP (Linux+Apache+MySQL+PHP)。实际上架构越复杂,意味着业务的体量约庞大。对于一个刚起步的项目,我们会选择简单快速的方式来实现。而单体架构是最好的...

2020-02-17 06:48:27 1197 1

原创 01-Spring Boot的基本认识

Spring Boot的基本认识不管是Spring Cloud Alibaba还是Spring Cloud Netflix,都是基于Spring Boot 这个微框架来构建的。本篇只对Spring Boot做一个基本认知。后续会对Spring 的自动装配做详细的源码分析。另外推荐小马哥的《Spring Boot 编程思想》(核心篇)。对Spring Boot 做了详尽的分析。什么是Spring...

2020-02-17 06:48:27 126

原创 11-线程池、forkjoin的原理分析

线程池、forkjoin的原理分析什么是线程池在Java中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个JVM里面创建太多线程,可能会使系统由于过度消耗内存或”切换过度“而导致系统资源紧张。为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有...

2020-01-15 14:02:35 555

原创 09-ConcurrentHashMap源码分析

ConcurrentHashMap源码分析ConcurrentHashMap的初步使用及场景ConcurrentHashMap的使用ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的HashMap,所以ConcurrentHashMap在并发编程的场景中使用的频率比较高,这里我们就从ConcurentHashMap的使用上以及源码层面来分析ConcurrentH...

2020-01-15 14:02:35 223

原创 10-阻塞队列、原子操作的原理分析

阻塞队列、原子操作的原理分析生产者消费者的实际使用相信大家都有使用过分布式消息队列,比如ActiveMQ、kafka、RabbitMQ等等,消息队列是可以使得程序之间实现解耦,提升程序响应的效率。如果我们把多线程环境比作是分布式的话,那么线程于线程之间是不是也可以使用这种消息队列的方式进行数据通信和解耦呢?阻塞队列的使用案例注册成功后增加积分加入我们模拟一个场景,就是用户注册的时候,在...

2020-01-15 14:02:35 323

原创 04-AQS底层原理分析

AQS底层原理分析J.U.C简介java.util.concurrent是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的Doug Lea。我们在接下来的课程中,会去剖析一些经典的比较常用的组件的设计思想。LockLock在J.U.C中是最核心的组件,前面我们将synchronized的时候说...

2020-01-15 14:02:35 201

原创 03-volatile

Volatile初步认识Volatile一段代码引发的思考下面这段代码,演示了一个使用volatile以及没使用volatile这个关键字,对于变量更新的影响package jvm;public class VolatileDemo { public /*volatile*/ static boolean stop = false; public static voi...

2020-01-15 14:02:35 101

原创 05-Spring-MVC源码分析

Spring-MVC源码分析Spring MVCSpring MVC相对于前面的章节是比较简单的,我们首先引用《Spring in Action》上的一张图来了解Spring MVC的核心组件和大致处理流程:�从上图中看到:①、DispatcherServlet是Spring MVC中的前端控制器(Front Controller),负责接收Request并将Request转发给对应的处...

2020-01-15 14:02:35 394

原创 02-kafka应用及原理

kafka应用及原理消息中间件能做什么消息中间件主要解决的是分布式系统之间的消息传递问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。举个非常简单的例子,就拿一个电商平台的注册功能来简单分析一下,用户注册这一个服务,不单单只是insert一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每个一个操作,都需要消耗1秒...

2020-01-15 14:02:35 246

原创 03-kafka分区副本及消息存储原理

�kafka分区副本及消息存储原理分区副本机制我们已经知道kafka的每个topic都可以分为多个Partition,并且多个Partition会均匀分布在集群的各个节点下。虽然这种方式能够有效的对数据进行分片,但是对于每个partition来说,都是单点的,当其中一个partition不可用的时候,那么这部分消息就没办法消费。所以kafka为了提高partition的可靠性而提供了副本的概念...

2020-01-15 14:02:35 848

原创 09-Kubernetes日志与监控

Kubernetes日志与监控LogLogPilot+ES+Kibanahttps://github.com/AliyunContainerService/log-pilot部署logpilot根据网盘log-pilot.yaml创建资源---apiVersion: extensions/v1beta1kind: DaemonSetmetadata: name: log-p...

2019-12-24 07:24:08 186

原创 10-Kubernetes Trouble Shooting

Kubernetes Trouble ShootingMastermaster上的组件共同组成了控制平面01 若apiserver出问题了 会导致整个K8s集群不可以使用,因为apiserver是K8s集群的大脑02 若etcd出问题了 apiserver和etcd则无法通信,kubelet也无法更新所在node上的状态03 当scheduler或者controller manager出...

2019-12-24 07:24:08 148

原创 08-Kubernetes部署策略

Kubernetes部署策略常见的部署方案滚动更新服务不会停止,但是整个pod会有新旧并存的情况。重新创建先停止旧的pod,然后再创建新的pod,这个过程服务是会间断的。蓝绿无需停机,风险较小部署v1的应用(一开始的状态)所有外部请求的流量都打到这个版本上.部署版本2的应用版本2的代码与版本1不同(新功能、Bug修复等).将流量从版本1切换到版本2。...

2019-12-24 06:51:29 139

原创 07-Kubernetes核心组件

Kubernetes核心组件Master和Node官网 :https://kubernetes.io/zh/docs/concepts/architecture/master-node-communication/MasterK8S集群中的控制节点,负责整个集群的管理和控制,可以做成高可用,防止一台Master宕机或者不可用。 其中有一些关键的组件:比如API Server,Contr...

2019-12-24 05:08:40 312

原创 02-镜像和容器

镜像和容器前文介绍了镜像的原理如下图:上面的这张图片非常好的展示了容器与镜像的关系,每一个镜像层都是建立在另一个镜像层之上的,同时所有的镜像层都是只读的,只有每个容器最顶层的容器层才可以被用户直接读写,所有的容器都建立在一些底层服务(Kernel)上,包括命名空间、控制组、rootfs 等等,这种容器的组装方式提供了非常大的灵活性,只读的镜像层通过共享也能够减少磁盘的占用。ImageDo...

2019-12-24 02:43:11 138

原创 06-Kubernetes深入掌握Pod

Kubernetes深入掌握Pod01 Pod进阶学习之路1.1 LifecyclePod的生命周期。官网:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络...

2019-12-24 02:43:11 486

原创 05-Kubernetes存储(Volumes PV PVC)

Kubernetes存储(Volumes PV PVC)1.1 VolumeVolume:https://kubernetes.io/docs/concepts/storage/volumes/On-disk files in a Container are ephemeral, which presents some problems for non-trivial applicatio...

2019-12-24 02:43:11 622

原创 03-Kubernetes常用资源使用及网络

Kubernetes常用资源使用及Ingress网络01 Controllers官网:https://kubernetes.io/docs/concepts/workloads/controllers/ReplicationController(RC)官网:https://kubernetes.io/docs/concepts/workloads/controllers/replic...

2019-12-22 06:42:38 254

原创 04-Kubernetes实战

Kubernetes实战部署wordpress+mysql创建wordpress命名空间kubectl create namespace wordpress创建wordpress-db.yaml文件apiVersion: apps/v1beta1kind: Deploymentmetadata: name: mysql-deploy namespace: wordpress...

2019-12-21 09:45:16 116

原创 02-Kubernetes入门

Kubernetes入门Kubernetes是什么Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,Kubernetes提供了...

2019-12-21 06:18:12 240

原创 05-Docker Compose与Docker Swarm

Docker Compose官网:https://docs.docker.com/compose/业务背景Docker传统方式实现写Python代码&build image(1)创建文件夹mkdir -p /tmp/composetestcd /tmp/composetest(2)创建app.py文件,写业务内容import timeimport redi...

2019-12-18 07:37:29 157

原创 04-Docker数据持久化与练习

Docker数据持久化与练习数据持久化Volume创建mysql数据库的containerdocker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD=111111 mysql查看volumedocker volume ls具体查看该volumedocker volume inspect 5f0cf0f385cee5817...

2019-12-18 06:13:32 147

原创 01-Docker基础及安装

Docker基础及安装Docker的基本概念镜像(Image)、容器(Container)、仓库(Repository)、网络(network)、数据卷(data volumes),是Docker中最基本也是最核心的概念,对这些概念的掌握与理解,是学习Docker的关键。Docker的架构Docker跟大部分服务端软件一样(如MySQL),都是使用C/S的架构模型,也就是通过客户端调用服务...

2019-12-17 11:50:29 150

空空如也

空空如也

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

TA关注的人

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