一大坨知识-11-Docker&K8S
chroot 是在 Unix 和 Linux 系统的一个操作,针对正在运作的软件行程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。 虚拟化技术_VMware 、VirtualBox、KVM 虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以将物理机的CPU、内存、硬盘、网络等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统,构建虚拟的应用程序执行环境。这就是我们通常说的虚拟机。 虚拟机的优点: 提升IT效率、降低运维成本 更快地部署工作负责 提高服务器可用性 虚拟机的缺点: 占用资源较多、性能较差 扩展、迁移能力较差 1. Why Docker场景 开发人员在本地编写代码,并使用Docker容器与其他同事共享劳动成果。 使用Docker将应用程序推送到测试环境中,并执行自动和手动测试。 开发人员可以在开发环境中对其进行修复,然后将其重新部署到测试环境中以进行测试和验证。 测试完成后,将修补程序推送给生产环境就像将更...
一大坨知识-10-ES
Elasticsearch可以实现 秒级 的搜索,cluster 是一种分布式的部署,极易扩展这样很容易使它处理PB级的数据库容量。最重要的是Elasticsearch是它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance) 1. 概述特点 安装方便 :没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群 JSON :输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便 RESTful :基本所有操作 ( 索引、查询、甚至是配置 ) 都可以通过 HTTP 接口进行 分布式 :节点对外表现对等(每个节点都可以用来做入口) 加入节点自动负载均衡 多租户 :可根据不同的用途分索引,可以同时操作多个索引 支持超大数据 : 可以扩展到 PB 级的结构化和非结构化数据 海量数据的近实时处理 功能 分布式的搜索引擎 分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索 全文检索 提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能 数据分析引擎(分组聚合)...
一大坨知识-9-分布式
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 1. 发展历程 入口级负载均衡 网关负载均衡 客户端负载均衡 单应用架构 应用服务和数据服务分离 应用服务集群 应用服务中心化SAAS 数据库主备读写分离 全文搜索引擎加快数据统计 缓存集群缓解数据库读压力 分布式消息中间件缓解数据库写压力 数据库水平拆分适应微服务 数据库垂直拆分解决慢查询 划分上下文拆分微服务 服务注册发现(Eureka、Nacos) 配置动态更新(Config、Apollo) 业务灰度发布(Gateway、Feign) 统一安全认证(Gateway、Auth) 服务降级限流(Hystrix、Sentinel) 接口检查监控(Actuator、Prometheus) 服务全链路追踪(Sleuth、Zipkin) 2. CAP 一致性 (2PC、3PC、Paxos、Raft) 强一致性: 数据库一致性 ,牺牲了性能 ACID :原子性、一致性、隔离性、持久性 弱一致性: 数据库和缓存 , 延迟双删、重试 单调读一致性: 缓存一...
一大坨知识-SpringCloud-8
Why SpringCloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册 、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等,都可以用 spring boot 的开发风格做到一键启动和部署。 SpringCloud(微服务解决方案) Dubbo(分布式服务治理框架) Rest API (轻量、灵活、swagger) RPC远程调用(高效、耦合) Eureka、Nacos Zookeeper 使用方便 性能好 即将推出SpringCloud2.0 断档5年后17年重启 SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案, 旨在快速搭建单个微服务,SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo进行优秀的整合开发 MartinFlower 提出的微服务之间是通过RestFulApi进行通信,...
一大坨知识-7-Spring
1. 设计思想&Beans1、IOC 控制反转IoC(Inverse of Control:控制反转) 是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value, Map中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 IoC容器就像是⼀个⼯⼚⼀样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。 DI 依赖注入 DI:(Dependancy Injection:依赖注入) 站在容器的角度,将对象创建依赖的其他对象注入到对象中。 2、AOP 动态代理AOP (Aspect-Oriented Programming:⾯向切⾯编程) 能够将那些与业务⽆关,却为业务模块所共同调⽤的逻辑或责任(例如事...
一大坨知识-6-Kafka
1. Why kafka消息队列的作用: 异步、削峰填谷、解耦 中小型公司 ,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ (开源、社区活跃)是不错的选择; 大型公司,基础架构研发实力较强,用 RocketMQ (Java二次开发) 是很好的选择。 如果是 大数据领域 的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。 RabbitMQ RabbitMQ开始是用在电信业务的可靠通信的,也是少有的几款 支持AMQP 协议的产品之一。 优点: 轻量级,快速,部署使用方便 支持灵活的路由配置。RabbitMQ中,在生产者和队列之间有一个交换器模块。根据配置的路由规则,生产者发送的消息可以发送到不同的队列中。路由规则很灵活,还可以自己实现。 RabbitMQ的客户端支持大多数的编程语言,支持 AMQP 协议。 缺点: 如果有大量消息堆积在队列中,性能会急剧下降 每秒处理几万到几十万的消息。如果应用要求高的性能,不要选择RabbitMQ。 RabbitMQ是Erlang开发的,功...
一大坨知识-5-Redis
1. WhyRedis速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; Name GuavaCache Tair EVCache Aerospike 类别 本地JVM缓存 分布式缓存 分布式缓存 分布式nosql数据库 应用 本地缓存 淘宝 Netflix、AWS 广告 性能 非常高 较高 很高 较高 持久化 无 有 有 有 集群 无 灵活配置 有 自动扩容 与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。 1、简单高效 完全基于内存,绝大部分请求是纯粹的内存操作。数据存在内存中,类似于 HashMap,查找和操作的时间复杂度都是O(1); 数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;...
一大坨知识-4-MySQL篇
1. WhyMysql?NoSQL数据库四大家族 列存储 Hbase K-V存储 Redis 图像存储 Neo4j 文档存储 MongoDB 海量Aerospike Aerospike(简称AS)是一个分布式,可扩展的键值存储的NoSQL 数据库 。T级别大数据高并发的结构化 数据存储,采用混合架构,索引存储在内存中,而数据可存储在机械硬盘(HDD)或固态硬盘(SSD) 上,读写操作达微妙级,99%的响应可在1毫秒内实现。 Name Aerospike Redis 类型 Nosql数据库 缓存 线程数 多线程 单线程 数据分片 自动处理相当于分片 提供分片算法、平衡各分片数据 数据扩容 动态增加数据卷平衡流量 需停机 数据同步 设置复制因子后可以透明的完成故障转移 手动故障转移和数据同步 载体 内存存储索引+SSD存储数据 内存 Aerospike作为一个大容量的NoSql解决方案,适合对 容量要求比较大,QPS相对低 一些的场景,主要用在广告行业,个性化推荐厂告是建立在了和掌握消费者独特的偏好和习性的基础之上,对消费者的购买需求做出准确...
一大坨知识-3-多线程篇
1. 线程调度线程状态 线程是cpu任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈 线程状态:创建、就绪、运行、阻塞、死亡 线程状态切换 方法 作用 区别 start 启动线程,由虚拟机自动调度执行run()方法 线程处于就绪状态 run 线程逻辑代码块处理,JVM调度执行 线程处于运行状态 sleep 让当前正在执行的线程休眠(暂停执行) 不释放锁 wait 使得当前线程等待 释放同步锁 notify 唤醒在此对象监视器上等待的单个线程 唤醒单个线程 notifyAll 唤醒在此对象监视器上等待的所有线程 唤醒多个线程 yiled 停止当前线程,让同等优先权的线程运行 用Thread类调用 join 使当前线程停下来等待,直至另一个调用join方法的线程终止 用线程对象调用 阻塞唤醒过程阻塞: 这三个方法的调用都会使当前线程阻塞。该线程将会被放置到对该Object的请求等待队列中,然后让出当前对Object所拥有的所有的同步请求。线程会一直暂停所有线程调度,直到下面其中一种情况发生: ① 其他线程调...
一大坨知识-2-JVM篇
JVM内存划分1. JVM运行时数据区域 堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器 Heap:对象的实例以及数组的内存都是要在堆上进行分配的,堆是线程共享的一块区域,用来存放对象实例,也是垃圾回收(GC)的主要区域;开启逃逸分析后,某些未逃逸的对象可以通过标量替换的方式在栈中分配, 堆细分:新生代、老年代, 新生代又分为: Eden区 和 Surviver1 和 Surviver2 区; 方法区:对于JVM的方法区也可以称之为永久区,它储存的是已经被java虚拟机加载的类信息、常量、静态变量;Jdk1.8以后取消了方法区这个概念,称之为元空间(MetaSpace); 当应用中的 Java 类过多时,比如 Spring 等一些使用动态代理的框架生成了很多类 ,如果占用空间超出了我们的设定值,就会发生元空间溢出 虚拟机栈:虚拟机栈是 线程私有 的 ,他的生命周期和线程的生命周期是一致的。里面装的是一个一个的 栈帧,每一个方法在执行的时候都会创建一个栈帧,栈帧中用来存放 (局部变量表 、操作数栈 、动态链接 、返回地址); 在Java虚拟机规范中,对此区域规定...