摘要:由于之前已经写了两篇部署kubernetes的文章,整个过程基本一致,所以这篇只着重说一下coredns和kube router的部署。 kube version: 1.9.1 docker version: 17.03.2 ce OS version: debian stretch 依然是三个ma 阅读全文
posted @ 2018-01-12 17:30 KeithTt 阅读 (1481) 评论 (0) 编辑
摘要:原理和架构图参考上一篇,这里只记录操作步骤。由于东西较多,篇幅也会较长。 etcd version: 3.2.11 kube version: 1.8.4 contiv version: 1.1.7 docker version: 17.03.2 ce OS version: debian stre 阅读全文
posted @ 2017-12-28 16:18 KeithTt 阅读 (2526) 评论 (7) 编辑
摘要:Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用。 针对kubernetes集群,高可用性还包含以下两个层面的考虑: etcd存储的高可用 master节点的高可用 在开始之前,先贴一下架构 阅读全文
posted @ 2017-11-25 22:44 KeithTt 阅读 (12079) 评论 (0) 编辑
摘要:先看一下Docker官网提示: In general, you’ll want to start with a working machine that is running the distribution you’d like to package as a parent image. 意思是你 阅读全文
posted @ 2017-08-09 03:22 KeithTt 阅读 (1591) 评论 (0) 编辑
摘要:这里主要记录 task 创建过程,jdk和插件安装等准备工作就不说了。 1、创建一个 maven 任务 2、添加项目描述 3、添加 git 仓库地址和分支 4、添加 pom 文件路径 和 maven 构建参数 5、发布代码 脚本太长截不全,具体如下: 阅读全文
posted @ 2020-03-27 22:21 KeithTt 阅读 (6) 评论 (0) 编辑
摘要:1、安装 rsync 和 inotify 2、编写监控脚本 3、后台运行 阅读全文
posted @ 2020-03-27 21:23 KeithTt 阅读 (5) 评论 (0) 编辑
摘要:架构图 节点规划 软件要求 1、在控制节点上安装依赖软件 2、创建 tidb 用户 3、配置sudo权限 4、切换用户,生成SSH KEY 5、下载 tidb ansible 项目代码 6、安装ansible和相关依赖 7、配置SSH互信 8、安装NTP 9、挂载磁盘(这一步可以在装系统的时候就准备 阅读全文
posted @ 2019-10-22 10:32 KeithTt 阅读 (186) 评论 (0) 编辑
摘要:图片较大,可以右键在新窗口打开,然后可以查看原图。 阅读全文
posted @ 2019-09-02 02:34 KeithTt 阅读 (39) 评论 (0) 编辑
摘要:1、同步资源 2、配置apache发布镜像目录,当然也可以用nginx或者其他web服务器 3、最后,配置repo就可以使用了 阅读全文
posted @ 2019-03-17 16:50 KeithTt 阅读 (644) 评论 (0) 编辑
摘要:redis不是一个纯文本kv存储,实际上,它是一个数据结构服务,支持不同类型的value。 包含以下类型: 关于key: key是二进制安全的,可以使用任意二进制序列作为key,包括纯字符串甚至是一个JPEG文件。 最大允许大小为512MB。 Strings 字符串类型是最简单的数据类型,是Memc 阅读全文
posted @ 2019-01-12 13:39 KeithTt 阅读 (140) 评论 (0) 编辑
摘要:这里仅针对docker本身,不涉及任何编排工具compose或者k8s等。 按照惯例,官文撸起来。 重要的部分是一些选项,用来限制资源大小。 Memory 多数选项值都是正整数,单位是b, k, m, g,分别表示 bytes, kilobytes, megabytes, 和 gigabytes。 阅读全文
posted @ 2019-01-06 23:35 KeithTt 阅读 (96) 评论 (0) 编辑
摘要:记性不好,回顾一下。按照惯例,直接看官文。 docker的网络子系统是插件化的,需要使用驱动。默认支持以下几种驱动: bridge:桥接,默认的网络驱动,如果不指定驱动,将默认使用桥接。通常用在同一个docker主机中的多个容器间通信。 host:去掉容器和宿主机之间的网络隔离,直接使用宿主机的网络 阅读全文
posted @ 2019-01-06 19:26 KeithTt 阅读 (78) 评论 (0) 编辑
摘要:首先,staticmethod和classmethod装饰器是通过非数据描述符实现的。用法简单,这里就不细说了。 这里主要分析一下staticmethod和classmethod是如何通过描述符实现的。 如果看过了上篇property,相比之下,这个就简单了不少。 这里用到了偏函数、装饰器以及面向对 阅读全文
posted @ 2019-01-05 12:41 KeithTt 阅读 (82) 评论 (0) 编辑
摘要:首先,property装饰器是通过数据描述符实现的。用法很简单,大家应该都知道,这里就不细说了。 这里主要分析一下property是如何通过描述符实现的。 访问 赋值 这里涉及到装饰器,需要对装饰器和面向对象有足够的了解才能弄明白当中的变量传递,希望你不会被挡住。 参考: https://docs. 阅读全文
posted @ 2019-01-05 07:04 KeithTt 阅读 (127) 评论 (0) 编辑
摘要:初学py的时候大家都说描述符是高级内容难度较大,仔细撸过文档之后感觉还好,不过用起来确实不那么直观。 按照惯例,先来看一下官文API文档: 总的来说,描述符是一个带有绑定行为的对象属性,访问这个对象属性的时候会被 描述符协议 中的方法覆盖,可以理解为一种hook机制。 描述符协议包括三个魔术方法: 阅读全文
posted @ 2019-01-05 05:44 KeithTt 阅读 (99) 评论 (0) 编辑
摘要:作为一个py3土著,并不是很关心这个问题,但是总有人隔三差五问这个问题,还是捋了一下。 这里列出几个主要区别: 1、最常见的人尽皆知的print()函数 在py2中,print是一个语句,不带括号,也可以带括号。 在py3中,print是一个函数,必须带括号调用。 2、除法 3、unicode 在p 阅读全文
posted @ 2019-01-04 07:33 KeithTt 阅读 (292) 评论 (0) 编辑
摘要:除了常见的os.system和os.popen方法,官方强烈推荐使用subprocess来调用系统命令。 这个库用起来其实很简单,按照惯例先贴一下官文关键点: 推荐的使用方式是:任何场景下,只要调用run()方法即可,已经封装好了一切。 底层接口Popen也可以直接使用,不过要注意管道堵塞问题。 A 阅读全文
posted @ 2018-12-27 15:07 KeithTt 阅读 (77) 评论 (0) 编辑
摘要:一、打包Django应用 1.创建setup.py文件 2.保存项目中使用的库 3.打包源码 二、在部署server上安装依赖包 三、修改Django配置文件 四、测试运行 第一种部署方式,直接以http方式启动 1.安装uwsgi 2.运行app 3.测试访问 http://ip:8001/pos 阅读全文
posted @ 2018-12-27 03:19 KeithTt 阅读 (661) 评论 (0) 编辑
摘要:Selenium把元素定位接口封装得更简单易用了,支持Xpath、CSS选择器、以及标签名、标签属性和标签文本查找。 参考: https://selenium python.readthedocs.io/locating elements.html https://selenium python.r 阅读全文
posted @ 2018-12-26 07:49 KeithTt 阅读 (80) 评论 (0) 编辑
摘要:1、数据是使用scrapy redis爬取的,存放在redis里面,爬取的是最近大热电影《海王》 2、使用了jieba中文分词解析库 3、使用了停用词stopwords,过滤掉一些无意义的词 4、使用matplotlib+wordcloud绘图展示 绘图结果: 参考: https://github. 阅读全文
posted @ 2018-12-26 06:41 KeithTt 阅读 (96) 评论 (0) 编辑
摘要:使用Xpath和BeautifulSoup来解析网页可以说真的很简便。 解析结果: 阅读全文
posted @ 2018-12-26 06:18 KeithTt 阅读 (118) 评论 (0) 编辑
摘要:三路快排 也是用来解决序列中存在大量重复元素的问题,比双路快排更高效 将序列分为三个部分,小于pivot、等于pivot、大于pivot 等于pivot的部分不递归,这样在存在大量重复元素时,将大大缩小递归的数据规模 阅读全文
posted @ 2018-12-26 02:41 KeithTt 阅读 (263) 评论 (0) 编辑
摘要:序列元素重复,是序列已经排好序的一种特殊情况,如果一个序列中的元素全部相同,也将出现最差情况。 如果序列中存在大量重复元素,在普通快排中,相等的元素会被全部放到分区点的一边,这样会大大增加快排的时间复杂度,双路快排就是用来解决这个问题的。 能够将序列均衡分开的分区点才是好的分区点。均匀分开意味着保持 阅读全文
posted @ 2018-12-26 01:07 KeithTt 阅读 (94) 评论 (0) 编辑
摘要:当序列已经排好序时,将出现最差情况,时间复杂度降为O(n²) 随机快排用于解决序列近乎有序时算法复杂度退化为O(n²)的问题 from random import shuffle, randrange def quick_sort(lst, left, right): 当只有一个元素的时候退出递归 阅读全文
posted @ 2018-12-26 01:04 KeithTt 阅读 (43) 评论 (0) 编辑
摘要:快速排序 又称分区交换排序(partition exchange sort) 平均时间复杂度为O(nlogn) from random import shuffle def quick_sort(lst, left, right): 当只有一个元素的时候退出递归 if left 阅读全文
posted @ 2018-12-26 01:00 KeithTt 阅读 (50) 评论 (0) 编辑
摘要:链表是实现了数据之间保持逻辑顺序,但存储空间不连续的数据结构。 相对于单向链表,双向链表多了一个指向前面一个节点的指针域。 链表查询效率较慢,因为查询的时候需要移动指针一个一个找。 双向链表新增和删除元素效率较高,因为链表会记录前一个节点和后一个节点。 class Node: def __init_ 阅读全文
posted @ 2018-09-27 02:44 KeithTt 阅读 (51) 评论 (0) 编辑
摘要:每一个结点有两个域,左边部份叫值域,用于存放用户数据。右边叫指针域,存储着指向后面一个节点的指针。 head节点永远指向第一个节点。 tail节点永远指向最后一个节点。 class Node: def __init__(self, item, next=None): self.item = item 阅读全文
posted @ 2018-09-27 02:38 KeithTt 阅读 (53) 评论 (0) 编辑
摘要:此堆非彼堆,先简单说一下概念和思路。 堆 \ 是一个完全二叉树 \ 每个非叶子结点都大于或等于其左右子结点的值称为大顶堆 \ 每个非叶子结点都小于或等于其左右子结点的值称为小顶堆 \ 根结点一定是大顶堆中的最大值,一定是小顶堆中的最小值 构建完全二叉树 \ 待排序数字为 30,20,80,40,50 阅读全文
posted @ 2018-09-19 21:36 KeithTt 阅读 (41) 评论 (0) 编辑
摘要:在一个有序序列(从小到大)中查找一个元素 每次将元素与序列中间位置的元素进行比较 如果大于中点,则在后半段。如果小于中点,则在前半段。以此类推 时间复杂度为O(logn) 有一个无序序列[37, 99, 73, 48, 47, 40, 40, 25, 99, 51],对其先排序输出新列表。 分别插入 阅读全文
posted @ 2018-09-19 20:10 KeithTt 阅读 (58) 评论 (0) 编辑
摘要:假设你正在爬楼梯,需要n阶你才能到达楼顶,n是正整数 每次你可以爬1或2个台阶,有多少种不同的方法可以爬到楼顶 当n=1时,steps=1 当n=2时,1+1,2 steps=2 当n=3时,1+1+1,1+2,2+1 steps=3 当n=4时,1+1+1+1,1+2+1,1+1+2,2+1+1, 阅读全文
posted @ 2018-09-02 22:22 KeithTt 阅读 (57) 评论 (0) 编辑
摘要:偏函数(partial) 把函数部分的参数固定下来,相当于为部分参数添加了一个固定的默认值,并返回一个新的可调用对象。 使用partial生成的新函数,是对原函数的封装。 基于一个函数创建一个新的可调用对象,把原函数的某些参数固定。 使用这个函数可以把接受一个或多个参数的函数改变成需要回调的API, 阅读全文
posted @ 2018-09-02 21:16 KeithTt 阅读 (49) 评论 (0) 编辑
摘要:柯里化(currying),是指把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下参数而且返回结果的新函数的技术。 柯里化是理解装饰器函数的一个非常重要的知识点。 比如,将加法函数柯里化: 参考: https://zh.wikipedia.org/wiki/柯 阅读全文
posted @ 2018-09-02 20:17 KeithTt 阅读 (29) 评论 (0) 编辑
摘要:通过构建有序序列,对于未排序部分,在已排序序列中从后向前扫描,找到相应的位置并插入。 如果输入序列已经是排好序的话,插入排序出现最佳情况。 如果输入序列是逆序排列的,将出现最坏情况。 如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的次数,即二分查找插入排序。 from rand 阅读全文
posted @ 2018-08-22 14:00 KeithTt 阅读 (34) 评论 (0) 编辑
摘要:选择排序分为升序或降序排列 两两比较大小,找出极值(极大值或极小值),然后放置到最后或最前 减少了交换次数,提高了效率,性能略好于冒泡排序 升序,改变一下判断条件即可 t = [1, 9, 8, 5, 6, 7, 4, 3, 2] for i in range(len(t) 1): minindex 阅读全文
posted @ 2018-08-22 13:51 KeithTt 阅读 (45) 评论 (0) 编辑
摘要:冒泡排序属于交换排序 相邻元素两两比较大小,如果前面比后面大,就交换位置,最后一个元素将是最大的数 时间复杂度为O(n²) 优化点: \ 冒泡法需要一轮一轮进行比较,如果某一趟中,一次都没有交换,那就说明序列已经排好序了,就可以停止循环了 参考: https://zh.wikipedia.org/w 阅读全文
posted @ 2018-08-22 13:34 KeithTt 阅读 (49) 评论 (0) 编辑
摘要:封装 将多个值使用逗号分割,组合在一起 省掉了小括号,返回一个元组 解构 把线性结构的元素解开,并顺序地赋给其它变量 左边接纳的变量数要和右边解开的元素个数一致 变量名 可以接收多个元素返回一个列表,贪婪模式,但不能单独使用 解构可以嵌套,同一层只能有一个 丢弃变量 是一个惯例,一个不成文的约定,不 阅读全文
posted @ 2018-08-14 00:38 KeithTt 阅读 (128) 评论 (0) 编辑
摘要:在python中集合分两种: set: 可变集合 fronzenset: 不可变集合 集合的特点 : 无序,非线性结构,不可以索引 不重复,常用于去重 可迭代 元素必须是可hash的,即不可变类型,包括嵌套数据结构中的元素 通过hash table实现,查询速度极快,可以高效地判断元素是否存在于某个 阅读全文
posted @ 2018-08-12 23:43 KeithTt 阅读 (57) 评论 (0) 编辑
摘要:通过位置参数传参 位置参数可以通过索引调用 通过关键字参数传参 ^, 分别是居中、左对齐、右对齐,后面带宽度 : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充 \+ 表示总是显示正负符号,在正数前显示 +,负数前显示 b、d、o、x 分别是二进制、十进制、八进制、十六进制 保留两位小 阅读全文
posted @ 2018-08-05 00:27 KeithTt 阅读 (97) 评论 (0) 编辑
摘要:左下角 这种情况最简单,列数 阅读全文
posted @ 2018-08-04 20:46 KeithTt 阅读 (204) 评论 (0) 编辑
摘要:这里主要是要考虑效率问题,在数据规模较大时,如果不考虑算法优化,效率将会非常差。 为什么可以只考虑平方根之前的部分,上面的备注中已经做了说明,这里以100为例解剖一下: for i in range(2, 100): if not 100 % i: print(i) 2 4 5 10 20 25 5 阅读全文
posted @ 2018-08-04 19:55 KeithTt 阅读 (275) 评论 (0) 编辑
摘要:这里只说一下简单的循环打印,递归之后再说。 求第101项 阅读全文
posted @ 2018-08-04 15:23 KeithTt 阅读 (1338) 评论 (0) 编辑
摘要:菱形 把菱形当做一个坐标系,[ 3, 2, 1, 0, 1, 2, 3] for i in range( 3, 4): 取绝对值 x = i if i 阅读全文
posted @ 2018-08-04 14:42 KeithTt 阅读 (148) 评论 (0) 编辑
摘要:在python中,为了优化速度,避免频繁申请和销毁内存空间,python使用小整数池来缓存 range( 5,257) 之间的整数(这里不包含257),这些小整数在赋值引用时使用的都是同一个对象和内存地址。 与此类似,对于字符串,python中有一个intern机制,用来优化常用字符串对象的内存分配 阅读全文
posted @ 2018-07-31 10:03 KeithTt 阅读 (96) 评论 (2) 编辑
摘要:按位运算就把数字转换为机器语言 二进制的数字来运算的一种运算形式。 只有按位取反运算符是单目运算符,其他都是双目运算符。 计算机中的符号数有三种表示方法,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。 在计算机系统中,数值一律用补码来表示和存储。 参考: http: 阅读全文
posted @ 2018-07-31 02:37 KeithTt 阅读 (110) 评论 (0) 编辑