Apollo 配置中心畅游

目前市面上的开源产品 Disconf 2014年7月百度开源的配置管理中心,同样具备配置的管理能力,目前已经不维护了,最近的一次代码提交是两年前了。 Spring Cloud Config 2014年9月开源,Spring Cloud生态组件,与Spring Cloud体系无缝整合。 Apollo 2016年5月,携程框架部开源的配置管理中心,具备规范的权限、流程治理等特性。 Nacos 2018年6月,阿里开源的配置中心,可以做DNS和RPC的服务发现。 为什么选择Apollo 社区活跃 刚刚发布了1.4.0版本,Issue处理速度快 文档齐全 体验,部署,设计文档都齐全 重要的灰度发布 想发布一台机器试试水,可以! 开源协议友好 Apache 2 license Apollo都有哪些重要功能 以下摘自官网说明 统一管理不同环境、不同集群的配置 配置修改实时生效(热发布) 版本发布管理 目前只支持对最近版本的恢复。https://github.com/ctripcorp/apollo/issues/1642 灰度发布 权限管理、发布审核、操作审计 编辑与发布是两个独立的操作。 客户端配置信息监控 提供Java和.Net原生客户端 提供开放平台API 这样可以通过其它方式来查看配置信息,平台API说明 使用方便的后台配置系统Portal 分布式部署相对较复杂,这是缺点 外部依赖少,目前依赖Mysql Apollo的组成 Apollo长什么样? Apollo整体设计 总体架构 代码结构 各模块概要介绍 Apollo Config Service 提供配置获取接口,服务对象为Apollo客户端 Apollo Admin Service 提供配置管理(修改、发布)接口,服务与Portal Apollo Portal 提供WEB界面供用户管理配置 Apollo的重要设计 Admin Service与Config Service的通信方式 Apollo使用Mysql实现消息(ReleaseMessage)的处理,消息内容为AppId+Cluster+Namespace,具体的设计思想可以参考这里 客户端与服务端的通信方式 客户端与服务端保持一个长连接(通过Http Long Polling实现) Client Server 重要的Namespace Namespace是配置项的集合,类似于一个配置文件的概念,获取的权限分为private与public两种权限。 Namespace的类型 私有类型 公有类型 关联类型(继承类型) Cluster能用来做什么? 分机房实例,分任务功能实例,比如在一些实例执行job,需要增加-Dapollo.cluster=配置指定集群名 ...

2019-05-09 ·  (🌟Updated: 2019-06-25) · 1 min · 108 words · tomyli

ARTS-打卡第一天

Algorithm LeetCode 第一题 题目描述 给一个int数组,返回数组中两个数字相加的和是目标 数的下标。可以假设每个输入只有一个解决方案,并且不能使用同一个元素两次。 Example 给出nums = [2, 7, 11, 15], 目标数为9,则返回[0, 1] 题目解答 import java.util.*; public class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < nums.length; i ++) { int second = target - nums[i]; if(map.containsKey(second)) { return new int[]{map.get(second), i}; } map.put(nums[i], i); } return new int[]{}; } } 相比两次循环的方式,这种处理的时间复杂度为O(n), 空间复杂度也为O(n). ...

2019-05-09 ·  (🌟Updated: 2020-01-08) · 1 min · 129 words · tomyli

Centos7 install issue collect

由于工作需要,使用VMWare虚拟机安装了Centos7系统,遇到了很多问题,现在把这些问题记录下来,以备后用。 解决Centos7 yum could not retrieve mirrorlist错误 刚安装好的VM使用ip add查看局域网的ip没有结果,这个参考https://my.oschina.net/u/2456768/blog/3011881 配置静态ip 安装虚拟机就是模拟多个机器通讯的情况,但是目前的配置是机器ip是动态获取的,老是变,每次都得看ip,所以需要配置一下VMware来支持静态ip。主要机器上的配置信息为: IPADDR=192.168.116.101 NETMASK=255.255.255.0 GATEWAY=192.168.116.2 DNS1=192.168.116.2 这个参考了https://blog.csdn.net/zhishengqianjun/article/details/77046796 Centos7安装后配置国内仓库源 由于国内访问centos的原始源慢,需要换成163的软件源,新安装的系统执行命令都提示not found,只能从物理下载源的配置再上传到VM中,但是首先得知道VM的ip地址,使用ifconfig是不可能了,查了一下可以使用 ip a 来查看VM的ip地址,这样配置源的的问题可以解决了,具体的配置源的方法参考https://blog.csdn.net/inslow/article/details/54177191 Centos7安装VMware Tools 想更好的让VM与物理机协同,则VMware Tools必须要安装,好久不用linux的我连挂载也忘的一干二净了。搜了一下,参考https://blog.csdn.net/WarnerWu/article/details/73718901 完成VMware Tools的安装。这样共享目录的功能就可以正常使用了 安装Jdk8 一句命令搞定: yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 安装mysql 使用yum安装mysql需要下载安装mysql的源,更新后就可以安装了,这个参考了https://www.linode.com/docs/databases/mysql/how-to-install-mysql-on-centos-7/ 修改mysql的root密码 安装完mysql后登录找不到密码了,其实在使用yum安装时会mysql会自动生成一个随机密码,这个密码可以在安装的日志中找到。此方法参考了https://blog.csdn.net/kuluzs/article/details/51924086 开放3306端口 为了方便mysql工具进行操作,需要开放3306端口。Centos7的防火墙还改了。具体就3个命令: systemctl start firewalld firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload 这个参考了https://www.jianshu.com/p/225a853350d9 安装oh-my-bash 由于一般服务器都自带bash为默认的shell,但是操作起来着实不方便,安装oh-my-bash可以对shell进行一些增强。https://github.com/ohmybash/oh-my-bash Centos自动登录 安装后每次启动VM都要输入密码,这个对于自己测试很麻烦,要使Centos能登录后自动登录需要做以下操作: 移除原来的getty@tty1.service软链接 rm /etc/systemd/system/getty.target.wants/getty@tty1.service 拷贝getty@.service file 并且命名为 getty@tty1.service cp /lib/systemd/system/getty@.service /etc/systemd/system/getty@tty1.service 编辑新拷贝的getty@tty1.service,修改以下内容,最后一行必须加上 [Service] ... ExecStart=-/sbin/agetty --autologin root --noclear %I ... [Install] ... ;Alias=getty@tty1.service 在getty.target.wants目录做一下软链接 ...

2019-05-06 ·  (🌟Updated: 2019-06-26) · 1 min · 85 words · tomyli

那些高效的Chrome插件

Surfingkeys 👍 严重推荐,VIM键盘模拟,自定义程度非常高 Immersive Translate 👍 无敌翻译软件,支持网页、PDF、本地文件翻译 Tampermonkey 👍 用户自定义脚本管理器 Enhanced GitHub Github加强版,显示仓库大小,下载单个文件等好用功能。插件地址 眺览 TillGlance 👍 一目十行的阅读方式 Elmo - Your AI companion to create summaries and insights 最大优点是生成的摘要最接近原文 Language Reactor 探索、理解并从母语材料中学习的完美助手 PeekLink - Chrome Web Store 浏览体验大升级 iorate/ublacklist: Blocks specific sites from appearing in Google search results WeRead to Readwise Sync, 微信读书笔记同步到Readwise - Chrome Web Store podStation Podcast Player - Chrome Web Store 浏览器中播放播客,支持下载 RSSHub Radar - Chrome Web Store Burning Vocabulary - Reading and Vocabulary Mate j3sch/logseq-clipper: A browser extension for capturing web content directly into your Logseq graph. Adapted from Obsidian’s Web Clipper. 优化logseq官方插件,直接捕获内容 ...

2019-03-08 ·  (🌟Updated: 2026-02-27) · 2 min · 314 words · tomyli

那些提高效率的命令行工具

brew Mac软件包管理工具。用命令行命令来安装软件,仓库软件丰富。地址 bat bat? No,高端cat,不费眼。带颜色显示,支持git状态,自动分页。地址 cowsay 奶牛说: 地址 coreutils 使用Rust重写的gnuutils。地址 direnv 环境变量切换,可以指定在进入某一文件夹后的操作,比如输出一条欢迎语句,在退出文件夹后则卸载变量(操作),它的stdlib内置了一些功能来处理环境。 地址 exa ls、tree的替代者,支持多种显示方式,支持按指定条件排序显示。地址 duti mac默认软件打开程序配置。再也不用一个手动的点击设置了,可以脚本化。地址 riggrep 强大的find,查询速度更快,支持匹配结果的字符替换,支持定义输出颜色。地址 fortune 英文名言集合,可以使用fortunes进行扩展,对中文用户更友好。地址 fzf 强大的交互式搜索,大大提高效率,官网提供了很多实用的操作目录与git的命令。地址 goku 改键神器Karabiner的配置管理器,更健康,更人性化。地址 htop 交互式的top信息显示,支持配色。地址 imgcat 命令行看图片。可以控制显示的高度、宽度。地址 jq json内容操作显示。支持分离、过滤、转换元素,判断JSON元素节点是否存在等功能,内置了很多方便的函数。 地址 jenv JDK版本管理命令行工具,支持全局、当前目录、当前shell的jdk版本指定。还可以指定Java虚拟机指定的JVM参数。支持插件的启用与禁用。地址 lnav log file navigator,增加的日志查看,可以根据日志级别显示不同颜色的日志信息。支持分页显示。地址 lolcat 命令、文件内容多彩输出。地址 m-cli Mac的瑞士军刀,支持各种mac组件(Dock,蓝牙,WIFI,Finder)的操作。地址 mackup Mac应用配置同步,支持多种存储方式。支持自定义应用的同步配置。主要命令为backup,restore,uninstall。地址 mas 命令行安装apple store应用。地址 mycli 命令行中的mysql客户端。地址 ncdu 增强版本的du,机器空间使用查询,支持扫描结果导出与导入,支持多种排序方式。地址 Ranger 命令行下的文件管理,强大到没朋友。地址 pandoc 文档转换,支持非常多的的格式转换。地址 pyenv pythne版本管理工具。地址 pyenv-virtualenv pythne虚拟环境管理,管理pyenv配置的环境。地址 prettyping 增强的ping,图形化显示,可以轻松的看出ping的地址的网络状况。地址 rtv 命令行中浏览reddit。地址 s-search 命令行下进行web搜索。地址 tmux 终端多会话管理器。地址 tldr 命令快速查询。简单的man。地址 Terminal Notify 命令行操作mac显示通知,支持图标显示与点击后操作(如打开网址,执行命令)等。地址 w3m 终端浏览器,操作方便。地址 ...

2018-09-30 ·  (🌟Updated: 2021-02-04) · 1 min · 119 words · tomyli

那些提高效率的Alfred Workflow

Alfred Maestro 操作Maestro的workflow,可以直接查找macro并执行。插件地址 Alfred github workflow 搜索github上的项目,可以搜索项目,人物等。插件地址 MyIP 快速的查询本机的ip,包括本地IP与外网IP。 SwitchHosts! 在alfred中快速本地host的配置,配合SwitchHosts来使用。插件地址 SnippetsLab 在alfred中快速查看SnippetsLab中的代码片断 VMWare Control 在alfred中控制vmware虚拟机。支持启动、停止、挂起、切换等操作。插件地址 lxbrvr/alfred-keepassxc-workflow: Alfred workflow for fetching the attributes of the KeepassXC entries. Alfred 快速密码访问 Alfred Browser Toolbox Toolbox是一个文件操作浏览的工具,它支持创建、查找文件的功能,还可以查询pdf文件,非常方便。Mac上的Finder使用确定不方便。这里有具体的使用方式。 Alfred Keywords Help 安装的workflow多了,记忆触发的keyword就比较困难,使用Keywords help这个插件可以显示出所有已经安装的workflow的触发key,还可以根据workflow进行查询。 Alfred My Mind 快速查询Nikita的githubpage内容的workflow,我在他的文章里面学到了很多。插件地址 Awesome lists 快速查询Github上awesome列表的workflow,只为发现更多。插件地址,这个也是Nikita的作品。 Baidu Map 在alfred上使用百度地图。插件地址 Birthday 在alfred中显示你来到这个世界多长时间,让你珍惜每一分,每一秒。插件地址 Calendar 在alfred中显示出当月的日历信息。插件地址 Chromes Bookmarks 在aflred中搜索Chrome浏览器的书签,非常的好用。插件地址 Common Search 国内常用网站的搜索,现在支持知乎、淘宝、掘金、github。插件地址 Dash 在alfred中进行Dash的搜索,开发者必备。插件地址 Directory watches 本地目录文件查看,指定目录的搜索,回收站文件显示。 Emacs Workflow 在alfred中进行emacs的操作,比如打开文件等。插件地址 Git Repos 搜索本地的git文件夹,搜索到后可以使用指定软件进行打开,开发时很有用。插件地址 Google Chrome History 在alfred中快速查看Chrome的浏览历史。插件地址 ...

2018-09-21 ·  (🌟Updated: 2025-01-03) · 1 min · 174 words · tomyli

那些提高效率的Idea插件

.ignore 插件说明 ignore文件忽略,支持绝大多数的开发语言,支持直接导航到忽略的文件,在创建时可以选择模板,比如Java开发可以选择Java与Idea选项来生成忽略target文件与.idea文件等的忽略规则。 项目地址 https://github.com/hsz/idea-gitignore IdeaVim 插件说明 在Idea中使用vi键位来进行编码操作,可以很高的提高效率,插件支持自定义键位来对Idea的action来进行定制,程序员可以根据自己的编程习惯来定制出一个键盘流来. 项目地址 https://github.com/JetBrains/ideavim IdeaVimExtension Plugin for JetBrains IDEs | JetBrains Marketplace IdeaVim的扩展功能 emacsIDEAs 插件说明 支持一些Emacs操作的Idea插件,主要是一些复制,移动,替换,跳转的快捷操作,目前使用最多的是快速查找替换. 项目地址 https://github.com/whunmr/emacsIDEAs acejump/AceJump: 🅰️ single character search, select, and jump Idea中快速跳转 支持行模式 支持IdeaVim集成 Custom Postfix Templates 插件说明 Idea中非常高效的就是postfix,但是系统自带不可以进行增加,这个插件就可以让用户可以自定义一些高级的postfix语句来提高效率。 项目地址 https://github.com/xylo/intellij-postfix-templates Jrebel 插件说明 动态部署代码插件,可以在不重启Tomcat的情况下进行代码的热部署,提高开发效率没得说。先前可以使用twitter号来免费使用,现在不行,需要自行购买了。 项目地址 https://zeroturnaround.com/software/jrebel/ HotSwapHelper 开源免费的热部署插件 CamelCase 插件说明 文本驼峰规则快速转换,支持从CamelCase->camelCaase->camel_case->camel-case->CAMEL_CASE的顺序转换,idea中只支持全部大写与全部小写的转换. 项目地址 https://plugins.jetbrains.com/plugin/7160-camelcase Codehelper 插件说明 代码自动生成插件,支持根据Pojo名来生成dao,mapper,xml等文件,目前使用较少 生成实体类的setter方法,使用频率高,主要是生成类的setter方法,配合F2查找下一个错误而使焦点至上而下,操作起来非常顺畅。 项目地址 https://github.com/zhengjunbase/codehelper.generator Translation 插件说明 Idea中集成翻译功能,目前支持有道和goolge,百度翻译. 项目地址 https://github.com/izhangzhihao/intellij-rainbow-brackets Clock 插件说明 当你全屏投入工作时,想知道当前的时间,需要切换出全屏模式,这样就打乱了节奏,这个插件可以在Idea的右下方显示出当前的时间信息,非常实用。 插件地址 https://github.com/xamgore/intellij-clock ...

2018-09-05 ·  (🌟Updated: 2025-02-25) · 2 min · 233 words · tomyli

设计模式学习之代理模式

说明 代理模式是设计模式中使用频率非常的高的模式,像日常生活中的房产中介、外卖平台都属于代理。代理模式就是在访问真正的业务之时不会直接与真正的业务进行调用,而是与一个与真正业务对象有着相同功能声明的代理来进行处理,但是最终的处理还是由真正的业务类来进行(决定),比如房产中介,他们会帮助找房者根据条件来对可选房屋进行筛选,但是最终订与不订的权利还是由找房者来决定。常见的代理有保护代理、虚拟代理、远程代理。 代理模式 我们常用的后台系统一般会根据用户权限的不同对用户展示不同的业务菜单,拥有高权限的人会展示相对多的菜单进行操作,在这个过程中还要记录用户的操作日志,用户点了什么,执行了什么操作都需要进行记录,达到有据可查。在这个业务场景下,就可以使用代理模式进行实现。代理对象会持有一个真正业务对象的实例,在代理对象中还引用日志服务与权限服务,所有的请求都经过这个代理类来进行,这样就可以根据操作的用户的状态来进行相应的处理了。具体的代码实现如下: 定义一个查询接口,在这里定义一个查询用户收入的方法,如下: package cn.imcompany.proxy; /** * Created by tomyli on 2018/6/28. * Github: https://github.com/peng051410 */ public interface Search { void queryIncome(String username); } 再定义一个实现该接口的具体业务类: package cn.imcompany.proxy; /** * Created by tomyli on 2018/6/28. * Github: https://github.com/peng051410 */ public class SearchService implements Search { @Override public void queryIncome(String username) { System.out.println(username + "开始查询"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(username + "查询完成"); } } 在上面代码中就实现了查询收入的方法,简单的打印了两行日志。 ...

2018-07-16 ·  (🌟Updated: 2019-06-26) · 1 min · 189 words · tomyli

设计模式学习之委托模式

说明 委托模式不属于23种设计模式中,但是它在Spring框架中使用的很频繁,Spring的作用在Java的开发是非常大,所以需要学习一下委托模式。委托模式是指两个对象都有相同的方法与功能,比如A、B两个对象都有相同的方法,但是有调用A的method方法,A不会自己来处理而是直接调用了B的同名方法,由两个对象参与同一个请求,接受请求的对象将委托给另一个对象来处理。 委托模式 在一般的公司中,都会分为老板、项目经理、开发人员结构,老板负责制定决策,分配给项目经理后,他不会自己来完成,而是把需要的功能进行分解,交给擅长的开发人员进行实现。虽然项目经理也可以完成,但是是他把这些事情委托给了多个开发人员来做,加快了完成任务的速度。就以这个需求来说,使用委托模式来进行实现: 定义抽象的人类接口: package cn.imcompany.delegate; /** * Created by tomyli on 2018/6/27. * Github: https://github.com/peng051410 */ public interface Member { void showName(); void showSkill(); void doWork(); } 上面代码中定义了抽象的人类接口,显示这个人的名字,拥有的技能,工作的状态情况,接下来实现需求中的每个人。 定义老板(BOSS): package cn.imcompany.delegate; /** * Created by tomyli on 2018/6/27. * Github: https://github.com/peng051410 */ public class Boss implements Member { @Override public void showName() { System.out.println("i am boss"); } @Override public void showSkill() { System.out.println("send commend"); } @Override public void doWork() { } } 定义项目经理和员工: ...

2018-07-07 ·  (🌟Updated: 2019-06-26) · 2 min · 282 words · tomyli

设计模式学习之观察者

说明 观察者模式在日常开发中使用频率也是非常高的,它建立了对象与对象之间的关系,一个对象的行为改变会通知到另一个对象,被通知的对象根据通知做出相应的处理动作。在观察者中分为目标对象(被观察者)、观察者。观察者模式是一种对象行为模式。 观察者模式 现在很多人都购买股票,在市面上有很多的股票软件供广大股民使用。股票软件一般会在用户关注的股票有变动时发送消息来通知股民。在这里,某一支股票就是目标对象,广大股民与股票软件就是观察者,他们根据股票的行情变化来做出相应买入或者卖出操作。这一需求可以使用观察者模式进行实现。代码如下: 先来定义一个抽象的购买股票的股民们,他们有喜有悲的心情: package cn.imcompany.observer.stock; /** * Created by tomyli on 2018/6/23. * Github: https://github.com/peng051410 */ public interface Buyer { void setName(String name); String getName(); void happy(); void sad(); } 再来定义具体的股民行为实现类: package cn.imcompany.observer.stock; /** * Created by tomyli on 2018/6/23. * Github: https://github.com/peng051410 */ public class ConcrectBuyer implements Buyer { private String name; @Override public void setName(String name) { this.name = name; } @Override public String getName() { return name; } @Override public void happy() { System.out.println(this.getName() + ":happy"); } @Override public void sad() { System.out.println(this.getName() + ":sad"); } } 具体的股民实现了喜与悲的方法,这样观察者已经准备就绪。下面来定义股票软件: ...

2018-07-04 ·  (🌟Updated: 2019-06-26) · 2 min · 244 words · tomyli