- 博客(327)
- 收藏
- 关注
原创 Kubernetes 实战 —— 05. 服务:让客户端发现 pod 并与之通信(下)
将服务暴露给外部客户端 P136有以下三种方式可以在外部访问服务:将服务的类型设置成 NodePort将服务的类型设置为 LoadBalance创建一个 Ingress 资源使用 NodePort 类型的服务 P137通过创建一个 NodePort 服务,可以让 Kubernetes 在其所有节点上保留一个端口(所有节点上都使用相同端口号),并将传入的连接转发给作为服务部分的 pod 。 P137创建 NodePort 类型的服务 P137可以使用如下描述文件 kubia-svc-no
2021-04-04 11:36:36
417
原创 Kubernetes 实战 —— 05. 服务:让客户端发现 pod 并与之通信(上)
简介 P121pod 通常需要对来自集群内部其他 pod ,以及来自集群外部的客户端的 HTTP 请求作出响应,所以需要一种寻找其他 pod 的方法来使用其他 pod 提供的服务。 P121在 Kubernetes 中通过服务 (service) 解决以下问题: P121pod 是短暂的: pod 随时启动和关闭Kubernetes 在 pod 启动前会给已经调度到节点上的 pod 分配 IP 地址:客户端不能提前知道 pod 的 IP 地址水平伸缩意味着多个 pod 可能提供相同的服务:每个
2021-03-30 11:31:30
416
原创 Kubernetes 实战 —— 04. 副本机制和其他控制器:部署托管的 pod
保持 pod 健康 P84只要 pod 调度到某个节点,该节点上的 Kubelet 就会运行 pod 的容器,从此只要该 pod 存在,就会保持运行。如果容器的主进程奔溃, Kubelet 就会自动重启容器;如果应用程序奔溃, Kubelet 就会自动重启应用程序。 P84应用程序也可能因为无限循环或死锁等情况而停止响应。为确保应用在这种情况下可以重新启动,必须从外部检查应用程序的运行状况,而不是依赖于应用的内部检测。 P84介绍存活探测器 P84Kubernetes 可以通过存活探测器 (live
2021-03-21 11:09:18
469
原创 Kubernetes 实战 —— 03. pod: 运行于 Kubernetes 中的容器
介绍 pod P53pod 是 Kubernetes 中最为重要的核心概念,而其他对象仅仅用于 pod 管理、 pod 暴露或被 pod 使用。 pod 是一组并置的容器,代表了 Kubernetes 中的基本构建模块。 P53当一个 pod 包含多个容器时,这些容器总是运行于同一个工作节点上——一个 pod 绝不会跨越多个工作节点。 P54为何需要 pod P54为何多个容器比单个容器中包含多个进程要好 P54假设一个由多个进程组成的应用程序,无论是通过 IPC (进程间通信)还是本地存储文件
2021-03-14 15:15:51
289
原创 Kubernetes 实战 —— 02. 开始使用 Kubernetes 和 Docker
创建、运行及共享容器镜像 P23运行容器 P24运行 P24可以运行 Docker 客户端可执行文件来执行各种 Docker 命令。例如:可以试着从 Docker Hub 的公共镜像仓库拉取、运行镜像。 Docker Hub 中有许多随时可用的常见镜像,其中就包括 busybox ,可以用来运行简单的命令,例如: echo "Hello world" 。 P24docker run busybox echo "Hello world"原理 P25执行 docker run 命令后: P25
2021-03-07 12:50:20
326
原创 Kubernetes 实战 —— 01. Kubernetes 介绍
简介 P2Kubernetes 能自动调度、配置、监管和故障处理,使开发者可以自主部署应用,并且控制部署的频率,完全脱离运维团队的帮助。 Kubernetes 同时能让运维团队监控整个系统,并且在硬件故障时重新调度应用。 P2Kubernetes 抽象了数据中心的硬件基础设施,使得对外暴露的只是一个巨大的资源池。 在部署多组件应用时, Kubernetes 会为每个组件都选择一个合适的服务器,部署之后它能够保证每个组件可以轻易地发现其他组件,并彼此之间实现通信。 P2Kubernetes 系统的需求
2021-02-28 12:22:23
240
2
原创 Redis 实战 —— 14. Redis 的 Lua 脚本编程
简介Redis 从 2.6 版本开始引入使用 Lua 编程语言进行的服务器端脚本编程功能,这个功能可以让用户直接在 Redis 内部执行各种操作,从而达到简化代码并提高性能的作用。 P248在不编写 C 代码的情况下添加新功能 P248通过使用 Lua 对 Redis 进行脚本编程,我们可以避免一些减慢开发速度或者导致性能下降对常见陷阱。 P248将 Lua 脚本载入 Redis P249SCRIPT LOAD 命令可以将脚本载入 Redis ,这个命令接受一个字符串格式的 Lua 脚本为参数,
2021-02-03 21:15:23
320
原创 Redis 实战 —— 13. 扩展 Redis
简介当数据量增大或者读写请求增多后,一台 Redis 服务器可能没办法再存储所有数据或者处理所有读写请求,那么就需要对 Redis 进行扩展,保证 Redis 在能存储所有数据对情况下,同时能正常处理读写请求。 P227扩展读性能 P227提高性能的几个途径 P228使用短结构:确保压缩列表的最大长度不会太大根据查询类型选择结构不要把列表当作集合使用不要获取整个散列,然后再客户端里面进行排序,而应使用有序集合大体积对象存储前进行压缩:减少读写所需的网络带宽。对比 lz4, gzip
2021-02-02 21:12:47
198
原创 Redis 实战 —— 12. 降低内存占用
简介降低 Redis 的内存占用有助于减少创建快照和加载快照所需的时间、提升载入 AOF 文件和重写 AOF 文件时的效率、缩短从服务器进行同步所需的时间(快照、 AOF 文件重写在 持久化选项 中进行了介绍,从服务器同步在 复制、处理故障、事务及性能优化 中进行了介绍),并且能让 Redis 存储更多的数据而无需添加额外的硬件。 P208短结构 (short structure) P208Redis 为列表、集合、散列和有序集合提供了一组配置选项,这些选项可以让 Redis 以更节约空间的方式存储长
2021-02-01 22:59:46
371
原创 Redis 实战 —— 10. 实现内容搜索、定向广告和职位搜索
使用 Redis 进行搜索 P153通过改变程序搜索数据的方式,并使用 Redis 来减少绝大部分基于单词或者关键字进行的内容搜索操作的执行时间。 P154基本搜索原理 P154倒排索引 (inverted indexes) 是互联网上绝大部分搜索引擎使用的底层结构,它类似于书本末尾的索引。倒排索引从每个被索引的文档里面提取一些单词,并记录包含每个单词的文档集合。 P154示例假设有三个文档:R = “it is what it is”S = “what is it”T = “it is
2021-01-29 22:37:41
309
原创 Redis 实战 —— 09. 实现任务队列、消息拉取和文件分发
任务队列 P133通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,可以推迟执行那些耗时对操作,这种将工作交给任务处理器来执行对做法被称为任务队列 (task queue) 。 P133先进先出队列 P133可以 Redis 的列表结构存储任务的相关信息,并使用 RPUSH 将待执行任务的相关信息推入列表右端,使用阻塞版本的弹出命令 BLPOP 从队列中弹出待执行任务的相关信息(因为任务处理器除了执行任务不需要执行其他工作)。 P134发送任务// 将任务参数推入指定任务对应的列表右
2021-01-28 21:44:59
636
原创 Redis 实战 —— 08. 实现自动补全、分布式锁和计数信号量
自动补全 P109自动补全在日常业务中随处可见,应该算一种最常见最通用的功能。实际业务场景肯定要包括包含子串的情况,其实这在一定程度上转换成了搜索功能,即包含某个子串的串,且优先展示前缀匹配的串。如果仅包含前缀,那么可以使用 Trie 树,但在包含其他的情况下,使用数据库/ ES 本身自带查询就足够了。可以按照四种情况(精确匹配、前缀、后缀、包含(也可将后两种融合成包含)),分别查询结果,直至达到数据条数上限或者全部查询完毕。但这种使用方法有缺点:查询次数多、难以分页。不过实际场景中需要补全的情况都只要第
2021-01-27 22:21:57
400
原创 Redis 实战 —— 07. 复制、处理故障、事务及性能优化
复制简介 P61关系型数据库通常会使用一个主服务器 (master) 向多个从服务器 (slave) 发送更新,并使用从服务器来处理所有读请求。 Redis 也采用了同样的方法实现自己的复制特性,并将其用作扩展性能的一种手段。 P69在接收到主服务器发送的数据初始副本 (initial copy of the data) 之后,客户端每次向主服务器进行写入时,从服务器都会实时地得到更新。 P69复制 P62对于一个正在运行的 Redis 服务器,用户可以通过发送 SLAVEOF NO ONE 命令来
2021-01-26 21:16:02
136
原创 Redis 实战 —— 06. 持久化选项
持久化选项简介 P61Redis 提供了两种不同的持久化方法来将数据存储到硬盘里面。RDB(redis database):可以将某一时刻的所有数据都写入硬盘里面。(保存的是数据本身)AOF(append only file):会在执行命令时,将被执行的写命令复制到硬盘里面。(保存的是数据的变更记录)两种持久化方法既可以同时使用,又可以单独使用,在某些情况下甚至可以两种方法都不使用,具体选择哪种持久化方法需要根据数据以及应用来决定。快照持久化 P62配置选项# 持久化触发条件:second
2021-01-25 22:04:25
137
原创 Redis 实战 —— 05. Redis 其他命令简介
发布与订阅 P52Redis 实现了发布与订阅(publish/subscribe)模式,又称 pub/sub 模式(与设计模式中的观察者模式类似)。订阅者负责订阅频道,发送者负责向频道发送二进制字符串消息。每当有消息被发送至给定频道时,频道的所有订阅者都会接收到消息。发布与订阅命令 P52命令格式描述SUBSCRIBESUBSCRIBE channel [channel …]订阅一个或多个频道UNSUBSCRIBEUNSUBSCRIBE [channel [chan
2021-01-24 10:53:41
173
原创 Redis 实战 —— 04. Redis 数据结构常用命令简介
字符串 P39Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string)、整数、浮点数。在需要的时候, Redis 会将整数转换成浮点数。整数的取值范围和系统的长整型(long)的相同,浮点数取值范围和精度与 IEEE 754 标准下的双精度浮点数(double)的相同。Redis 中的自增命令和自减命令 P39命令格式描述INCRINCR key将键存储的数字值加上 1DECRDECR key将键存储的数字值减去
2021-01-23 10:18:38
209
原创 Redis 实战 —— 03. Redis 简单实践 - Web应用
需求功能: P23登录 cookie购物车 cookie缓存生成的网页缓存数据库行分析网页访问记录高层次角度下的 Web 应用 P23从高层次的角度来看, Web 应用就是通过 HTTP 协议对网页浏览器发送的请求进行响应的服务器或者服务(service)。 Web 请求一般是无状态的(stateless),即服务器本身不会记录与过往请求有关的任何信息,使得失效的服务器可以很容易地被替换掉。Web 服务器对请求进行响应的典型步骤:服务器对客户端发来对请求(request)进行解析
2021-01-22 22:49:18
290
原创 Redis 实战 —— 02. Redis 简单实践 - 文章投票
需求功能: P15发布文章获取文章文章分组投支持票数值及限制条件 P15如果一篇文章获得了至少 200 张支持票,那么这篇文章就是一篇有趣的文章如果这个网站每天有 50 篇有趣的文章,那么网站要把这 50 篇文章放到文章列表页前 100 位至少一天支持文章评分(投支持票会加评分),且评分随时间递减实现投支持票 P15如果要实现评分实时随时间递减,且支持按评分排序,那么工作量很大而且不精确。可以想到只有时间戳会随时间实时变化,如果我们把发布文章的时间戳当作初始评分,那么后发布的
2021-01-21 22:18:51
269
原创 Redis 实战 —— 01. Redis 数据结构简介
一些数据库和缓存服务器的特性和功能 P4名称类型数据存储选项查询类型附加功能Redis使用内存存储(in-memory)的非关系数据库字符串、列表、哈希表、集合、有序集合每种数据类型都有自己的专属命令,另外还有批量操作(bulk operation)和不完全(partial)的事务支持发布与订阅,主从复制(master/slave replication)memcached使用内存存储的键值缓存键值之间的映射增删改查以及其他几个命令为提升性能而设的多线程服务
2021-01-20 21:06:06
179
原创 有道云笔记非会员上传图片
背景先看一下目前的效果:在「Markdown 笔记」原有的上传图片弹窗中增加了一个我们自定义的上传按钮,通过直接与后端 API 交互完成图片上传(相关 API 是「笔记」上传时公开使用的)。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YcVDfCZT-1611068421267)(https://github.com/idealism-xxm/tampermonkey/raw/master/note-youdao/%E6%BC%94%E7%A4%BA.gif)]两年前
2021-01-19 23:01:03
452
原创 Head First 设计模式 —— 15. 与设计模式相处
模式是在某情境(context)下,针对某问题的某种解决方案。 P579情景:应用某个模式的情况问题:你想在某情境下达到的目标,但也可以是某情境下的约束解决方案:一个通用的设计,用来解决约束、达到目标模式必须应用于一个重复出现的问题。 P581思考题配对下列模式和描述: P587装饰器模式:包装一个对象,以提供新的行为状态模式:封装了基于状态的行为,并使用委托在行为之间切换迭代器模式:在对象的集合之中游走,而不暴露集合的实现外观模式:简化一群类的接口策略模式:封装可以互换的行为
2021-01-18 21:20:27
200
原创 Head First 设计模式 —— 14. 复合 (Compound) 模式
复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。 P500思考题public interface Quackable { public void quack();}public class MallardDuck implements Quackable { public void quack() { System.out.println("Quack"); }}public class Goose { public
2021-01-17 10:41:09
227
原创 Head First 设计模式 —— 13. 代理 (Proxy) 模式
思考题如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标类的代理对象(消费者)的方法,消费者内部将相关调用信息通过网络传到服务端对应的目标类的代理对象(生产者)中,生产者解析调用信息,然后真正去调用目标类的实际对象,并将返回结果回传给消费者,消费者再返回给客户端。 RPC 框架使用代理模式使得内部一系列处理及信息传输等对客户端和服务端是透明的,客户端会认为实际是本
2021-01-16 13:11:37
228
原创 Head First 设计模式 —— 12. 状态 (State) 模式
思考题public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static SOLD = 3; int state = SOLD_OUT; int count = 0; public GumballMachine(int
2021-01-15 21:07:33
187
原创 Head First 设计模式 —— 11. 组合 (Composite) 模式
思考题我们不仅仅要支持多个菜单,升值还要支持菜单中的菜单。你如何处理这个新的设计需求? P355【提示】在我们的新设计中,真正需要以下三点: P354我们需要某种属性结构,可以容纳菜单、子菜单和菜单项我们需要确定能够在每个菜单的各个项之间游走,而且至少要像现在用迭代器一样方便我们也需要能够更有弹性地在菜单项之间游走。比方说,可能只需要遍历甜点菜单,或者可以遍历餐厅的整个菜单(包括甜点菜单在内)提供一个接口,统一菜单和菜单项的超类接口包含菜单和菜单项的共同方法,菜单中执行方法是依次执行
2021-01-14 20:56:06
155
原创 Head First 设计模式 —— 10. 迭代器 (Iterator) 模式
思考题public void printMenu() { PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); ArrayList breakfastItems = pancakeHouseMenu.getMenuItems(); DinerMenu dinerMenu = new DinerMenu(); MenuItem[] lunchItems = dinerMenu.getMenuItems
2021-01-13 20:45:31
181
原创 Head First 设计模式 —— 09. 模版方法 (Template Method) 模式
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 P289特点主导算法框架,并且保护这个算法 P288最大化复用代码 P288算法只存在于一个地方,容易修改 P288专注算法本身,由子类提供完整的实现 P288模板方法本身和内部具体操作解耦 P289设计原则好莱坞原则:低层组件别调用高层组件,让高层组件调用低层组件。 P296优点防止依赖腐败(依赖腐败会使用户难以弄懂系统的设计) P2
2021-01-12 21:04:40
176
原创 Head First 设计模式 —— 08. 外观 (Facade) 模式
思考题想想看,你在 JavaAPI 中遇到过哪些外观,你还希望 Java 能够新增哪些外观? P262println、log 日志接口、JDBC 接口突然让想感觉想不出来,各种 API 都用得挺顺的,没有太麻烦的使用外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 P264特点提供简化的接口的同时,依然将系统完整的功能暴露出来 P260将客户从组件的子系统中解耦 P260意图是提供子系统的一个简化接口 P260区别 P270
2021-01-11 21:48:55
227
原创 Head First 设计模式 —— 07. 适配器模式
思考题你能想到真实世界中,还有哪些适配器的例子? P236HDMI 转 VGA 转换器Type-C 转 3.5mm 线适配器模式解析客户使用适配器的过程: P241客户通过目标接口调用适配器的方法对适配器发出请求适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用(客户和被适配者是解耦的,一个不知道另一个)思考题如果我们也需要一个将鸭子转换成火鸡的适配器,我们称它为 DuckAdapter。请写下这个类。你如何处
2021-01-10 11:24:18
207
原创 Head First 设计模式 —— 06. 命令 (Command) 模式
命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 P206特点使请求调用者和请求接收者解耦 P207适合用来建立有弹性的设计,维持开闭原则 (同装饰器模式 P104)使用宏命令可以一次执行其他一系列命令 P225缺点存大量具体的命令类思考题命令模式的设计如何支持请求调用者和请求接收者之间的解耦? P207通过将请求接受者封装进一个命令对象,并将请求接收者的一系列动作封装成一个命令对象的方法,使得请求调用者只用持有命令
2021-01-09 13:59:49
198
原创 Head First 设计模式 —— 05. 单例模式
全局变量的缺点如果将对象赋值给一个全局变量,那么必须在程序一开始就创建好对象 P170和 JVM 实现有关,有些 JVM 的实现是:在用到的时候才创建对象思考题Choc-O-Holic 公司使用如下工业强度巧克力锅炉控制器public class ChocolateBoiler { private boolean empty; private boolean boiled; public ChocolateBoiler() { empty =
2021-01-08 21:19:26
240
2
原创 Head First 设计模式 —— 04. 工厂 (Factory) 模式
思考题如何将实例化具体类的代码从应用中抽离,或者封装起来,使它们不会干扰应用的其他部分? P111将实例化具体类的代码放入一个对象中管理,通过不同入参决定实例化具体的类简单工厂不是23种GOF设计模式之一,而更像一种编程习惯。 P117[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zHM6pdNX-1610024779349)(https://github.com/idealism-xxm/reading-notes/raw/master/head-first-
2021-01-07 21:06:50
261
原创 Head First 设计模式 - 03. 装饰器(Decorator)模式
装饰器(Decorator)模式思考题思考题思考题设计原则装饰器模式特点缺点思考题所思所想思考题有如下类设计:如果牛奶的价钱上扬,怎么办?新增一种焦糖调料风味时,怎么办?造成这种维护上的困难,违反了我们之前提过的哪种设计原则? P82取出并封装变化的部分,让其他部分不收影响多用组合,少用继承思考题请为下面类的 cost() 方法书写代码。 P83抽象类:Beverage...
2019-05-12 09:52:24
640
1
原创 Head First 设计模式 - 02. 观察者(Observer)模式
观察者(Observer)模式思考题观察者模式设计原则所思所想思考题在我们的一个实现中,下列哪种说法正确?(多选) P42public class WeatherDate { // 实例变量声明 public void measurementsChanged() { float temp = getTemperature(); flo...
2019-05-12 08:48:58
391
原创 Head First 设计模式 - 01. 策略(Strategy )模式
策略(Strategy )模式思考题使用接口方式的优缺点 `P6`优点缺点思考题设计原则设计原则“针对接口编程”即“针对超类型 (supertype) 编程” `P12`设计原则策略模式良好的OO设计具备的特性 `P32`所思所想当涉及到“维护”时,为了“复用”目的而使用继承,结局并不完美 P4对父类代码进行修改时,影响层面可能会很大思考题利用继承来提供 Duck 的行为,这回导...
2019-05-09 23:25:02
408
原创 Head First 设计模式 - 00. 引子
《Head First 设计模式》- 00. 引子Head First 学习原则 `P xxx`学习方法 `P xxxiii`Head First 学习原则 P xxx可视化:图片使得学习效率更高,更易懂交谈式:第一人称交谈方式讲述学习内容更易引起注意多思考:自主思考练习题和拓展知识的问题保持注意力集中:将知识融合进有趣、亮眼的内容中,不断引起并保持注意力影响情绪:关心、好奇、有趣、...
2019-05-09 22:58:36
348
原创 Educational Codeforces Round 38 [Codeforces938]
题目链接 官方题解A. Word Correction题目大意设a,e,i,o,u,ya,e,i,o,u,ya,e,i,o,u,y是六个特殊字母,如果一个小写字母串从左往右读,出现连续两个特殊字母时,则删除后面这个特殊字母,直至没有连续两个特殊字母,输出这样处理后的字符串。思路 - 模拟按照题意模拟即可:iii表示将要输出的字母,jjj表示下一个可能会输出的字母 ...
2018-02-18 21:27:10
425
原创 Educational Codeforces Round 37 [Codeforces920]
题目链接 官方题解A. Swap Adjacent Elements题目大意在长度为nnn的草坪上,有kkk个水龙头,第iii个水龙头位置为xixix_i,水龙头的水在打开后第jjj秒会对[x-(j-1), x+(j-1)]内的所有草坪洒水。现在同时打开所有水龙头,求最短多少秒时所有草坪都能被洒到水?思路 - 模拟相邻两个水龙头之间的草坪全部能被洒水需要cur−l...
2018-02-04 23:26:04
272
原创 Codeforces Round-#458 (Div. 2 && Div. 1) [Codeforces914]
题目链接 官方题解914 - A - Perfect Squares[模拟]题目大意在给出的n" role="presentation" style="position: relative;">nnn个数中,求出不是完全平方数的最大的一个数。思路 - 模拟先初始化106" role="presentation" style="position: relative;">
2018-01-28 16:12:31
341
原创 X Samara Regional Intercollegiate Programming Contest
题目链接[题目](http://codeforces.com/gym/101341 "X Samara Regional Intercollegiate Programming Contest")[非官方代码](https://github.com/luqmanarifin/cp/tree/master/X%20Samara%20Regional%20Intercollegiate%20Programming
2017-05-06 17:02:19
1357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人