Browsed by
月份:2020年7月

浅谈服务治理与微服务

浅谈服务治理与微服务

閱讀本文約花費: 12 (分鐘)近期都在谈微服务,本人也正在做相关的工作,应领导要求做了一个微服务的分享,本篇文章主要来源于分享的PPT,所以有些简单,有问题可以在下面留言,大家 一起讨论。 本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后再介绍微服务,微服务是服务治理的升级也是互联网架构的进一步延伸。 互联网架构演变 一体架构 在计算机软件发展早期,一般桌面软件都是采用这种架构,不管是界面还是业务处理还是数据处理都放到一个包中。这种其实谈不上架构,但也可以说是很好的架构,因为它足够简单。 mvc架构 但随着浏览器的出现便产生了web应用,web应用的特点是界面部分是显示在浏览器中,服务处理是在服务容器中的,页面显示一般用css+js+html技术来处理,而后端可以用java、php等语言,这就产生了前后端分离。对于web系统,一体架构难以满足前后端分离的开发需求,因而便产生了MVC架构。 MVC才算的上真正意义上的架构,因为它除了解决了前后端分离问题,还引入了一种全新的开发模式,用一种业务逻辑、数据、界面显示分离的方法组织代码,使得整个应用层次更加分明,而且各个层次之间不但减低了耦合性,还提高了各个层次的可重用性。 但随着应用规模的不断扩大,应用模块不断增加,整个应用也显得越来越臃肿,维护起来也更加困难,因此便又产生了多应用架构。 多应用架构 多应用架构很简单,就是把…

Read More Read More

内网畅外网墙–再聊Nginx访问权限管理

内网畅外网墙–再聊Nginx访问权限管理

閱讀本文約花費: 6 (分鐘)接昨天。 low address bits of 192.168.101.0/16 are meaningless in /usr/local/nginx/conf/nginx.conf:122 网关 网关在网络层以上实现网络互连,是复杂的网络互连设备。网关既可以用于广域网互连,也可以用于局域网互连。 A:IP地址范围 192.168.1.1~192. 168.1.254,子网掩码 255.255.255.0B:IP地址范围 192.168.2.1~192. 168.2.254,子网掩码 255.255.255.0 计算所得(见下述计算方式):A 网络地址为 192.168.1.0,B网络地址为 192.168.2.0。 两个网络中的主机处在不同的网络里,而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。 网关 pk. 路由器 网关:一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关 路由器:连接两个或多个网络的硬件设备,路由器很显然能够实现网关的功能 缺省网关:是子网与外网连接的设备,通常是一个路由器。PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行…

Read More Read More

在厦门大学的演讲

在厦门大学的演讲

閱讀本文約花費: 7 (分鐘)by 韩寒 时间:2010年2月1日地点:厦门大学活动:2009南方周末文化原创榜文化论坛厦门站 第二次来到厦门,然后这里的空气很好,难怪……大家都喜欢散步啊……刚才我听邓老师说了一些关于爱国主义的一些东西,那我想到了两句话,我是之前看到的,但是别人说的不是我说的:第一句话是……爱国主义是流氓最后的庇护所。第二句话是……真正的爱国主义就是要保护这个国家,让这个国家不受到任何的迫害。 然后今天我为了一些说的内容带了一个稿纸,这是为了约束我自己。我觉得……到时候大家不要受到什么迫害,我怕我满嘴跑火车……开始了啊: 各位领导,各位老师,各位同学大家好,大家知道中国为什么成为不了文化大国吗?因为在我们大部分的讲话的时候,各位领导永远是放在第一位的,而各位领导都是没有文化的。他们还是惧怕文化的,是审查文化,但是呢,他们又能够控制文化,所以说这个国家怎么够成为……文化大国呢?各位领导,你们说呢? 其实中国是有成为一个文化大国的潜力的。我给大家讲一个故事。我要主编一本杂志,那么现在都没有出版。然后呢,宪法上有规定啊,每个公民都拥有出版的自由,但是呢我们的王法又有规定,就是领导有不让你出版的自由。 这个杂志呢很多地方在审查上遇到了很多问题,里面有一副漫画,漫画是一张图,主人公是个男的,他没有穿衣服。当然这就是不可以了,因为相关的法律、法规规定不能露出那个阴部来公开的出…

Read More Read More

Nginx 访问权限管理

Nginx 访问权限管理

閱讀本文約花費: 4 (分鐘)前段时间,团队开放了组件库演示环境,由于存在一些小伙伴在外地办公(只能外网或者 vpn 到内网)。所以,为了安全考虑,设想是否可以通过 Nginx 做一些访问限制呢?当然,答案是肯定的。 诉求整理: 内网:为了便利性,随意访问,不设限制; 外网:通过指定的用户名和密码访问(当然,要求秘钥的保密性)。 增加认证 这个很简单,使用 Nginx 的 ngx_http_auth_basic_module 模块,即可完成。 ngx_http_auth_basic_module 模块允许通过使用“HTTP基本身份验证”协议验证用户名和密码来限制对资源的访问。 上述 auth_basic 、auth_basic_user_file 作用域均为 http, server, location, limit_excep。 对于密码形式,其支持(具体可以查看参考链接 Nginx 相关模块信息): 用 crypt() 函数加密; 可以使用 Apache HTTP Server发行版中的 “htpasswd” 实用程序或 “openssl passwd” 命令生成; 使用基于 MD5 的密码算法(apr1)的 Apache 变体进行散列; 由 RFC 2307&nbsp…

Read More Read More

去阿里面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化?

去阿里面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化?

閱讀本文約花費: 4 (分鐘) 链接:https://www.cnblogs.com/YangJiaXin/p/10933458.html 目录 谁在消耗cpu?祸首是谁? 用户 IO等待 产生影响 如何减少CPU消耗? 减少等待 减少计算 升级cpu 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 image image 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正在进行大量tps函数/排序/类型转化/逻辑IO访问… 用户空间消耗大量cpu,产生的系统调用是什么?那些函数使用了cpu周期? IO等待 等待IO请求的完成 此时CPU实际上空闲 如vmstat中的wa 很高。但IO等待增加,wa也不一定会上升(请求I/O后等待响应,但进程从核上移开了) image image 产生影响 用户和IO等待消耗了大部分cpu 吞吐量下降(tps) 查询响应时间增加 慢查询数增加 对mysql的并发陡增,也会产生上诉影响 image 如何减少CPU消耗? 减少等待 减少IO量 SQL/index,使用合适的索引减少扫描的行数(需平衡索引的正收益和维护开销,空间换时间) 提升IO处理能力 加cache/加磁盘/SSD image 减少计算 减少逻辑运算量 避免使用函数,将运算转移至易扩展的应用服务器中如substr等字符运算,dateadd/datesub等日期运算,abs等…

Read More Read More

我是如何一步一步监控公司MySQL的每一个操作?

我是如何一步一步监控公司MySQL的每一个操作?

閱讀本文約花費: 11 (分鐘)作为一个程序员,闲下来还是喜欢学习钻研一些新奇的技术,canal就成了很好的研究对象,一不小心就监控了公司MySQL的一举一动的 一、canal是个啥? canal是阿里开发的一款基于数据库增量日志解析,提供增量数据订阅与消费的框架,整个框架纯JAVA开发,目前仅支持Mysql和MariaDB(和mysql类似)。 那什么是数据库增量日志? MySQL的日志种类是比较多的,主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志。而MySQL数据库所发生的数据变更(DML(data manipulation language)数据操纵语言,也就是我们熟悉的增删改),都会以二进制日志(binary log)形式存储。 二、canal原理 在介绍canal原理之前,我们先来回顾一下MySQL主从同步的原理,这或许会让你更好的理解canal的工作机制。 1、MySQL主从同步原理: MySQL主从同步也叫读写分离,可以提升数据库的负载和容错能力,实现数据库的高可用 先来分析一张MySQL主从同步原理图: image 以上图片源自网络,如有侵权联系删除 master节点操作过程: 当master节点数据发生更改后(delete、update、insert,还是创建函数、存储过程等操作),向binary log中写入记录日志,这些记录又叫做二进制日志事件…

Read More Read More

无语,我差点被面试官怼坏了,又给我问到MySQL索引

无语,我差点被面试官怼坏了,又给我问到MySQL索引

閱讀本文約花費: 23 (分鐘)前一阵子,又跑出去搞了一场面试,心态算是崩了,关于MySQL索引的原理及使用被面试官怼的体无完肤,立志要总结一番,然后一直没有时间(其实是懒……),准备好了吗? image 一、MySQL中索引的语法 创建索引 在创建表的时候添加索引 在创建表以后添加索引 注意: 1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行 根据索引查询 删除索引 查看表中的索引 查看查询语句使用索引的情况 二、索引的优缺点 优势:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序; 劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表; 三、索引的分类 常见的索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引 1、主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值; 2、唯一索引:用来建立索引的列的值必须是唯一的,允许空值 3、普通索引:用表中的普通列构建的索引,没有任何限制 4、全文索引:用大文本对象的列构建的索引(…

Read More Read More

Spring AOP – 通知类型

Spring AOP – 通知类型

閱讀本文約花費: 3 (分鐘)对spring有开发经验的同学,相信对spring aop并不陌生,而spring的事物就是使用aop实现的。aop的大多数的应用场景是日志记录,权限验证等。 最近笔者自己在项目中有个接口签名校验的功能,aop的功能正好能够实现此功能。但是在开发过程中,发现对此的使用比较模糊,特意查询资料,写下此文作为记录。 Advice通知类型介绍: Before前置通知,在目标方法执行之前做增强处理,@Before 只需要指定切入点表达式即可。 Around环绕通知,在目标方法完成前后做增强处理,Around 环绕通知是最重要的通知类型,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint。 AfterReturning后置通知,在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式后,还可以指定一个返回值形参名 returning ,代表目标方法的返回值。如果方法没有正常返回,或者抛出异常,不会执行 AfterThrowing异常通知,主要用来处理程序中未处理的异常,@AfterThrowing 除了指定切入点表达式后,还可以指定一个throwing的返回值形参名,可以通过该形参名来访问目标方法中所抛出的异常对象 After最终通知,在目标方法完成之后做增强,无论目标方法是否…

Read More Read More

苹果放弃英特尔芯片,为什么会打击美国计算机产业?

苹果放弃英特尔芯片,为什么会打击美国计算机产业?

閱讀本文約花費: 16 (分鐘)今年6月22日,苹果公司在一年一度的全球开发者大会 WWDC 上,宣布彻底放弃英特尔公司(Intel)的 CPU,改用自己设计的 ARM 芯片。 上一篇文章已经分析过了,苹果为什么要这样做。主要原因是,整个苹果战略是围绕移动端(iPhone)构建的,它现在想把移动端和桌面端合成一个生态,自己完全控制所有硬件和软件,不愿再让 CPU 这样的核心部件受制于英特尔了。 今天接着往下谈,这个”换芯”决定有什么后果。 表面上看,这是苹果公司的”家务事”,但是实际上牵动各方的利益,产生一系列的连锁反应,动摇长久以来主导行业的 Wintel 联盟,甚至会影响到美国的竞争优势。 一、英特尔的反应 苹果宣布换芯以后,英特尔仅仅发了一个简短的声明。 “苹果公司与我们有多个业务领域的合作,我们将继续为他们提供支持。……我们相信,基于 Intel 的 PC 将为全球客户提供最佳的体验。” 言下之意,这只是一件小事,不用大惊小怪。市场似乎也同意这种观点,英特尔股价当天小幅下跌,没过几天又涨回去了。 为什么英特尔觉得影响不大? 因为它的利润主要来自服务器 CPU,2019年占到利润总额的一半。个人电脑 CPU 的利润只占到三分之一,而 MacOS 只占全世界桌面操作系统市场的17%,…

Read More Read More

使用Kubernetes实现高级调度技术

使用Kubernetes实现高级调度技术

閱讀本文約花費: 14 (分鐘)使用Kubernetes这样的高级容器编排工具的优势之一就是,它的调度程序非常灵活。这为用户提供了广泛的选择,可以用来指定将Pod分配给满足条件的特定工作站节点的环境,而不仅仅基于节点的可用资源。为了解释Kubernetes如何决定将pod放置在正确的主机上,我们可以看一下Kubernetes master及一些组件的简化图: 主API(kube-apiserver)是一种提供对集群需求和当前状态进行读/写的工具。像调度程序这样的组件可以使用主API检索当前状态信息,应用一些逻辑和计算,并使用有关所需状态的新信息更新API(例如,指定要将哪个节点安排到新pod,或者指定哪个pod应该移动到另一个节点)。另外,集群用户和管理员可以更新集群状态或通过Kubernetes仪表板查看它,该仪表板对外提供API。CI / CD管道还可以使用API创建新资源或修改现有资源。 其他调用api的主要角色是名为“kubelets”的代理节点,它在工作节点上管理容器运行状态(通常为Docker)。当Kubelet判断出要报告的主机预期状态与其实际状态之间存在差异时,它将启动或终止需要的容器以达到主API描述的目标状态。Kubelets经常查询API,或者观察它们的变化,这就是为什么Kubernetes对更新和更改的响应几乎是即时的。(几秒钟)。 正如我们所看到的,Kub…

Read More Read More

苹果电脑为什么要换 CPU:Intel 与 ARM 的战争

苹果电脑为什么要换 CPU:Intel 与 ARM 的战争

閱讀本文約花費: 12 (分鐘)三个月前,新款 iPad Pro 发布,支持触摸板和鼠标。 上图的黑点就是鼠标。苹果公司显然打算,平板电脑当作笔记本使用。 我们知道,iPad 的操作系统跟 iPhone 是一样的,都是基于 iOS。如果 iOS 可以用于笔记本,就意味着可以跟桌面系统 MacOS 统一了。如果 MacBook 和 iPhone 都用同一个操作系统,App 就能通用了。 苹果公司显然也是这么打算的。几天后的6月22日将举行 WWDC(苹果全球开发者大会)。媒体报道,苹果公司将在那一天宣布,更换 Mac 电脑的 CPU,从 Intel 公司的 x86 架构改成 ARM 架构。 一旦 Mac 跟 iPhone 使用同样架构的 CPU,那就铺平了统一操作系统的道路。操作系统无法通用的最主要原因,就是 CPU 架构不同。 本文回顾苹果公司的 CPU 架构变化历史,帮助大家理解这件事的技术含义,以及未来的影响。 一、CPU 架构是什么 CPU 的全称是”中央处理单元”,它是计算机的核心,计算都由它来完成。但是,CPU 本身只是一个概念,每家芯片公司都有自己的具体实现。 不同的 CPU 设计实现,就称为” CPU 架构”(CPU architecture)。 不同的 CPU 架构有不同的指令集,彼此不通用,这导致运行在上面…

Read More Read More

微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布

微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布

閱讀本文約花費: 7 (分鐘) 在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得停机,有的不需要停机即可完成部署。本文的目的就是将目前常用的布署方案做一个总结。 一、蓝绿布署 Blue/Green Deployment(蓝绿部署) 1、定义 蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本,然后老版本同时也升级到新版本。 1、特点 蓝绿部署无需停机,并且风险较小。 2、布署过程 第一步、部署版本1的应用(一开始的状态) 所有外部请求的流量都打到这个版本上。 image.png 第二步、部署版本2的应用 版本2的代码与版本1不同(新功能、Bug修复等)。 第三步、将流量从版本1切换到版本2。 image.png 第四步、如版本2测试正常,就删除版本1正在使用的资源(例如实例),从此正式用版本2。 3、小结 从过程不难发现,在部署的过程中,我们的应用始终在线。并且,新版本上线的过程中,并没有修改老版本的任何内容,在部署期间,老版本的状态不受影响。这样风险很小,并且,只要老版本的资源不被删除,理论上,我们可以在任何时间回滚到老版本。 4、蓝绿发布的注意事项 当你切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果你的数据库后端无法处理,会是一个比较…

Read More Read More

部署策略对比:蓝绿部署、金丝雀发布及其他

部署策略对比:蓝绿部署、金丝雀发布及其他

閱讀本文約花費: 13 (分鐘)目前,软件开发最大的变化是部署频率。产品团队更早(更频繁)的将产品发布到生产环境。数月或者数年的发布周期变得越来越短 – 对那些构建纯软件产品的人来说更是如此。 现在,使用面向服务的架构和微服务方式,开发者可以设计模块化的代码库。这允许他们同时在代码库中不同的地方编写和部署代变更。 缩短部署周期的业务优势狠明显: 缩短上市时间 客户可以在更短的时间内获得产品价值 客户的反馈也会更快的到达产品团队,这意味着团队可以更快的迭代特性和修复问题 开发人员的整体士气会上升 但是,这种转变也给运维或者 DevOps 团队带来了新挑战。更频繁的部署,意味着已经部署的代码会对站点可用性和客户体验带来负面影响。这就是制定代码部署策略如此重要的原因,因为它可以最大限度的降低产品和客户的风险。 在本文中,我们将讨论不同的部署策略、最佳实践和工具,让你的团队可以更快更可靠的工作。 现代应用的挑战 现代应用通常是分布式的,基于云的。它们可以弹性扩展来满足需求,基于高可用架构更好地容错。这些应用可以使用全托管服务,例如 AWS Lambda 和 Elastic Container Service(ECS) 等平台处理一些运维责任。 这些应用经常频繁部署。例如,移动 app 和 web 应用可能一个月内经历多次更改。有些甚至一天…

Read More Read More

连接zookeeper时报”Path cannot be null”错误的解决方法

连接zookeeper时报”Path cannot be null”错误的解决方法

閱讀本文約花費: 3 (分鐘)   上周将公司生产环境中zookeeper集群中的一台zookeeper重启后,所有的连接此zookeeper的客户端都报如下错误: [ctvpay] 2018-03-23 10:57:08.569 — ERROR [main-EventThread] CuratorFrameworkImpl.java:529 – Watcherexceptionjava.lang.IllegalArgumentException: Path cannot be null        at org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:45) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]        at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1572) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]        at com.netflix.curator.framework…

Read More Read More

Scroll Up