摘要: 二分查找针对有序集合,每次查找通过跟中间元素对比大小,将待查找的区间缩小为原来的一半,直到找到要查找的元素或者区间缩小为0. 二分查找是一种时间复杂度为O(logN)的查找算法,有时甚至比 hash 表中的 O(1)算法效率还要高,因为 hash 表计算 hash 值、解决冲突所花的时间不一定比 O 阅读全文
posted @ 2020-01-30 17:03 葡萄不吐皮 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 栈是一种操作受限的线性表,只允许在一端插入或删除数据,后进先出,先进后出,就是典型的栈结构。 栈主要包含2个操作,入栈和出栈,也就是在栈顶插入或删除一个元素。 实现一个基于数组的顺序栈: 栈在表达式求值中的应用 将表达式简化为只包含加、减、乘、除四则运算,例如:3 + 2 4 1,人脑可 阅读全文
posted @ 2020-01-28 14:54 葡萄不吐皮 阅读(2509) 评论(0) 推荐(0) 编辑
摘要: 之前的安装一个服务只是记录了服务的可执行文件,实际上初次安装还需要将相关的配置文件下发到目标主机。 页面实现一个选择配置修订号的入口,默认选中服务的默认配置,如下图: 基于 layui 可以这样实现: 表单提交后,后端也要进行相关校验: 若修订号id存在,则使用些修订号 若修订号不存在,则使用默认配 阅读全文
posted @ 2020-01-04 16:21 葡萄不吐皮 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 新部署一个服务时,除了服务本身,还有它启动依赖的配置文件也要一并发布到目标主机。配置文件从哪里来?如何发送到目标主机?修改后如何同步? 我们可以在页面提供上传或新增功能,为每个服务保存一份默认的配置文件包,新部署时将此包的内容写入etcd,由主机上的守护进程去同步,后续的修改也只是更新etcd里的内 阅读全文
posted @ 2019-12-28 17:38 葡萄不吐皮 阅读(708) 评论(0) 推荐(0) 编辑
摘要: 深夜的办公室灯火通明,为了今晚的大版本上线,同事们已经连续奋战了几十个日日夜夜。"但愿今晚平安上线,接下来就能休息几天了",小明这样想着,打开终端登录服务器,等待操作时间到来。 作为一名运维工程师,这样的版本升级小明经历过无数次,况且在之前进行过数次模拟升级,这次想必也不会出什么太大的问题。 升级时 阅读全文
posted @ 2019-12-21 21:29 葡萄不吐皮 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 相对于服务的升级、回退,新部署一个服务要复杂一些,要满足以下要求: 已经运行了服务实例的主机不能重复部署 进程启动需要的配置文件要先同步到主机上 之前的升级、回退都是指进程的操作,不涉及配置文件的变更 配置文件的管理、同步比较复杂,放到后面,这里就专注于服务的安装了 不能重复部署,这个比较容易实现, 阅读全文
posted @ 2019-12-21 13:20 葡萄不吐皮 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 发布实际上就是将服务的某个版本和一台主机关联,我用一张表(MicroServiceInstance)记录了主机id、服务id、版本id,目前一台主机只能部署一个版本,所以主机id和服务id要做联合索引。 当我们操作某个实例时(升级、回退),为了防止其他人也进行相关操作,要对实例当前的状态就行判断,这 阅读全文
posted @ 2019-12-14 14:27 葡萄不吐皮 阅读(502) 评论(0) 推荐(0) 编辑
摘要: 上一篇服务版本的新增,是通过触发 gitlab 任务来实现的,那么如何得到任务的最终状态呢? 好在 gitlab 为我们提供了webhook,也就是消息钩子,可以发送pipeline消息到我们指定的地址。 当我们收到消息后,就可以跟据任务的最终状态(成功or失败)来更新数据库里相应的版本: 失败时直 阅读全文
posted @ 2019-12-09 12:57 葡萄不吐皮 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 前面做好了服务的管理,接下来是服务版本的管理,和服务类似,版本也有增删改查。先在服务的管理页面做一个入口,如下图: 需要在上一步的服务管理页面增加按钮、按钮方法,点击按钮跳转时要打开一个新的页面,所以还要增加对应的页面视图。 页面方法 templates/microservice/service.h 阅读全文
posted @ 2019-12-08 22:04 葡萄不吐皮 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 通常页面要能对资源进行增删改查,对应http的 POST、DELETE、UPDATE、GET 页面显示使用了layui,而layui的表格有自己的数据获取方式,所以我们的视图要做一些调整,不使用后端渲染,只返回数据 具体的实现是页面点击按钮或者导航后,服务端渲染一个空的页面,剩下的数据由页面的js驱 阅读全文
posted @ 2019-12-01 18:38 葡萄不吐皮 阅读(437) 评论(0) 推荐(0) 编辑