深入解读“去IOE”背后的本质原因与技术价值
社区广播:运维派(Yunweipai.com)是国内最早成立的IT运维社区,欢迎大家投稿,让运维人不再孤寂的成长!浙江移动的去IOE之路已经走了几年,从答卷单上看也是成绩满满:云化比例可观,I基本快去完了(无技术瓶颈,少量老旧设备按计划逐步下线罢了),E剩下也不是太多了(还有少量技术瓶颈),O基本控制在CRM核心交易库了,而且彻底实现了CRM核心数据库承载x86化。核心CRM应用容器化微服务化了,企业级微服务平台初具规模了,开发运维模式敏捷转型持续推进中了。现在,是时候回过头来重新盘点和反思一下去IOE。第一个核心问题:去IOE是什么?IOE不是洪水猛兽,IOE和我们也没有仇,去IOE不能从字面上去理解,不能为去而去。IOE在历史上发挥过关键作用,今后一段时间内也未必没有合适的应用场景,即使谈到技术发展,也有一句话叫做老兵不死,只是慢慢凋零,没有一蹴而就非黑即白的事情。国家安全信息安全?层次太高,上头决策我们基层执行就是,我不评论不讨论该不该的问题,我这个层面只需要说清楚技术改造的代价和方案,同时做好预案就行。我们把技术问题转化为
MySQL · 源码分析 · Tokudb序列化和反序列化过程
数据在磁盘上是序列化过的,序列化的过程就是把一个数据结构转换成字节流。写数据包括两个阶段:序列化:把结构化数据转成字节流压缩:对序列化好的数据进行压缩tokudb序列化和压缩单位是partition,对于internal节点,就是把msgbuffer序列化并压缩;对于leaf节点,就是把basementnode序列化并压缩。一个节点(node)在磁盘上是如何存储的呢?节点数据在写盘时会被写到某个offset开始的位置,这个offset是从blocktable里面分配的一个空闲的空间。我们后面会专门写一篇有关btt(BlockTranslationTable)和blocktable的文章。一个node的数据包含:header,pivotkey和partition三部分:header:节点meta信息pivotkey:记录了每个partition的key区间partition:排序数据;一个node如果包含多个partition,这些partition是依次顺序存放的有趣的是,压缩算法的信息是存放在partition
构造快速搜索体验
汽车贸易商为经销商提供了一个从其他贸易商那儿购买汽车的平台。高性能的搜索体验是至关重要的,这样能帮助他们在经销商购买汽车的市场上更具有竞争优势。这篇博客将带你体验我们构造一个1秒以内定期返回结果的高性能搜索平台。~~~~<><>一般默认是按最新的汽车进行排序的。这个平台同你比较熟悉的正常的站点的行为非常不一样。搜索体验是围绕我们的经销商准备了,让他们能够快速的决定购买哪些汽车来填充他们的前院。经销商能够进一步完善他们的搜索以显示更适合他们的汽车。网站越慢越会减少搜索的人,所以会降低经销商跟我们一起做宣传的欲望。提早发布linkalert(“1223”);XSS当我们最初推出这个平台的时候,我们仍需要做一些改变来使得搜索体验能被接受。我们注意到,即使我们的网络请求能在一个相当合理的时间(大约1.5秒)内返回,我们仍需要花费很长时间才能开始搜索并且显示结果。link这是因为AngularJS在控制页面内容改变存在已知的性能限制。我们做了一些关键的变化来显著提高单页面应用的性能:大部分代码都是使用ng-sho
带你开发一个日历控件
首发我的博客-https://blog.cdswyda.com/post/2017121010日历控件多的不胜枚举,为什么我们还要再造一个轮子呢?因为大多数日历控件都是用于选择日期的,有种需求是要在日历上展示各种各样的内容,这样的日历控件较少,而且试用下来并不满意。因此就再造一个轮子,现在带你一起基于使用之前完成的组件机制来开发一个日历控件。需求简单把需求整理如下:月视图支持在日历中每一天中插入任意的内容相关点击事件获取日历当前视图的开始和结束日期获取设置选中的日期实现分析首先我们拿系统中自带的日历观察一下,看看日历的特征到底是怎么样的。一个月中有28到31天不等,但是为了保证完整的结构,日历中会有部分上一月和下一月的日期,总结下来,一个月中显示的必定是整整6周的日期。那么只要得到当月的开始日期就可以绘制日历了。如何计算当月日历视图中的开始日期呢?前面已经分析了,为了保证完整,它显示了上一月的部分天数,那么只用从当月的1号开始往前推算就可以了。开始日期=当月1号的日期-当月1号的星期
基于gulp+webpack 快速搭建的前端自动化脚手架
适用于中小型项目,快速构建前端项目框架。比如运营活动页,官网类,简单移动端项目,小demo测试等项目启动//常用命令开发环境:npmrundev生产环境:npmrunbuild//单任务命令执行压缩:gulpzip编译页面:gulphtml编译脚本:gulpscript编译样式:gulpstyles语法检测:gulpeslint压缩图片:gulpimages项目地址如对你有帮助,希望给个Star!哈哈哈!!gitclonehttps://github.com/vincentSea/gulp-cli.git项目目录├──README.md#项目说明├──config#gulp路径配置├──dist#打包路径|├──gulpfile.js#gulp配置文件├──package.json#依
用nvm改变node版本的时候全局模块找不到
写文章登录用nvm改变node版本的时候全局模块找不到方晓anhourago翻译bypeak原文地址如果你全局安装一个npm包my-package在你的电脑上,然后用nvm改变node的版本的时候,你将不能在全局范围内访问my-package.这是因为nvm安装全局模块到当前node版本的时候不会和其它版本共享.nvm原理当你安装一个全局的包(或者本地),假设这个包是兼容的并在那个node版本上经过测试.如果你改变了node的版本,并不能保证你安装的那个模块在当前的版本上是兼容个的.可能这个包在这个新的node版本上并没有经过测试.所以nvm要保持安装的全局包只针对特定的node版本.如果用户需要一些模块进行转发,他要么重新安装他们,要么使用--reinstall-packages-from参数.现实问题我同意nvm团队的理论.但是开发者很懒惰.如果他不得不一次又一次的手动在不同的node版本上安装像grunt,bower这样的包.它肯定会成为我的痛苦.因此,我个人需要以某种方式转发全局包达到目标的方法一种讨论最多的方法
一行 CSS 代码实现响应式布局 – 使用 Grid 实现的响应式布局
在这篇文章中,我将教你如何使用CSSGrid(网格)布局来创建一个超酷的图像网格,它会根据屏幕的宽度改变列的数量,以实现响应式布局。而这篇文章中最漂亮的部分是:添加一行CSS代码即可实现响应式布局。这意味着我们不必通过丑陋的类名(即col-sm-4,col-md-8)来混淆HTML,或者为每一个屏幕尺寸创建媒体查询。现在就让让我们开始吧!设置对于本文,我们将继续使用5分钟学会CSSGrid布局文章中使用的网格。然后我们将在文章的最后添加图片。以下是我们的初始网格的外观:这是HTML:
如何快速学习 CSS Grid 布局 – 相关资源和教程推荐
这篇文章是CSSGrid布局有用的资源和教程,帮你快速了解相关知识。同时还比较了CSSGrid、Flexbox、Table布局之间的区别,及适用情况。CSSGrid布局今年真的很火。该布局系统规范最近获得了主流浏览器的支持,包括最新版本的Firefox,Chrome,Opera,Safari和Edge。这里我分享一大堆资源,方便你快速学习。5分钟学会CSSGrid布局:heart::heart::heart::heart::heart:5星推荐文章地址:LearnCSSGridin5Minutes中文译文:5分钟学会CSSGrid布局强烈建议你将这篇文章作为你Grid布局的最简入门,文章很短,你甚至不需要5分钟就能读完。文章剔除了你不刚入门不需要关系的术语和复杂的属性,只是为了让你了解最基础的Grid布局知识。结合代码和图示,非常言简意赅,浅显易懂。或许通过这篇文章可以让你对Grid布局产生浓厚的兴趣。不管学习什么,刚入门时的兴趣和成就感是非常重要的,这
flask 项目中使用 bootstrapFileInput(基础篇)
bootstrap为flask使用人员提供了一个非常优美且有效的前端页面组件,但是完美之处还存在些许缺陷,比如文件的上传功能.而bootstrap-fileinput是基于bootstrap的控件,非常完美的填补了这个空缺.注意:本文是基于bootstrap-fileinputv4.4.2.github地址:https://github.com/kartik-v/bootstrap-fileinput注意:本文是主要是以http://plugins.krajee.com/file-input/demo示例为基础进行讲解.创建蓝图basic创建方法请参照flask项目中使用bootstrapFileInput(构建篇)中lib蓝图的创建方法,此处不在赘述.构建基础html模板app/basic/templates/basic_common/base.html内容如下:
CSS新手常遇到的一些坑
bottom一定是从底部计算吗?考虑这样的一种场景,有两个div,我们希望下面的div能够固定到底部,一开始我是这么写的
从a标签为什么不能包含div标签-了解HTML5元素分类与内容模型
我们知道按新的HTML规范,已经不按inline和block来区分元素类型了。所以我们在a标签里面使用div标签时候会发现a标签并不能通过改变css盒子模型的方式将div元素包含。元素分类HTML5中,元素主要分为7类:MetadataFlowSectioningHeadingPhrasingEmbeddedInteractive这些分类集合互相之间也存在一定的交集(一个元素可以同时属于多个分类),其交集关系呈现为:需要注意的是,HTML5中的这种元素分类与inline、block没有任何关系,任何元素都可以在CSS中被定义为display:inline或者display:block。另外,除了这7大分类,还存在一些较小的分类,如Script-Supporting元素等。Metadata(元数据元素)顾名思义,Metadata元素意指那些定义文档元数据信息的元素—其作用包括:影响文档中其它节点的展现与行为、定义文档与其它外部资源之间的关系等。以下元素属于Metadata:base,
基于TableStore(表格存储)构建简易海量Topic消息队列
摘要:前言消息队列,通常有两种场景,一种是发布者订阅模式,一种是生产者消费者模式。发布者订阅模式,即发布者生产消息放入队列,多个监听的消费者都会收到同一份消息,也就是每个消费者收到的消息是一样的。生产者消费者模式,生产者生产消息放入队列,多个消费者同时监听队列,谁先抢到消息就会从队列中取走消息,最终每个消息只会有一个消费者拥有。前言消息队列,通常有两种场景,一种是发布者订阅模式,一种是生产者消费者模式。发布者订阅模式,即发布者生产消息放入队列,多个监听的消费者都会收到同一份消息,也就是每个消费者收到的消息是一样的。生产者消费者模式,生产者生产消息放入队列,多个消费者同时监听队列,谁先抢到消息就会从队列中取走消息,最终每个消息只会有一个消费者拥有。在大数据时代,传统的生产者消费者队列模式中的Topic数目可能从少量的几个变为海量topic。例如要实现一个全网爬虫抓取任务调度系统,每个大型的门户,SNS都会成为一个topic。在topic内部也会有海量的子网页需要抓取。在实现这样的一个任务分发调度系统时可能会遇到以下一些问题:海量的top
技术演讲需要准备什么?
最近参加了SASummit2017的技术大会分享,在这边总结下并分享一下自己是如何准备的。请老司机们多提点建议。一、了解观众的诉求了解需求永远是做任何事的第一步,脱离了观众的诉求都是偏题的。需要知道这次技术分享的主题大方向是什么?是分布式架构、前端架构,还是运维架构。需要考虑到你的听众是谁?是5年以上的架构师,还是3年左右的工程师,不一样的听众背景决定了分享的侧重点,只有考虑到了听众的技术背景,才能有针对性的思考哪些内容可以详细解释,哪些可以一笔带过。二、好的开始是成功的一半开头的几分钟主要是自我介绍、演讲大纲介绍。一般自我介绍的时候,主要告诉大家我是谁?来自什么公司?目前是什么职位及相关的从业经历表达好自我介绍后,一定要告诉听众此次演讲对大家有什么好处。听完之后大家会收获什么知识,能够解决什么问题。如果安全的度过开始的三分钟,对应的紧张的情绪会极大的缓解。此时可以全神贯注的进行后面分享的内容。举个这次分享用过的例子大家好,我是来自XX公司的架构师XXX我原先在百度负责过XX系统,具有高并发、大流
如何使用 Angular 存取 Web API ?
前後端分離後,前端除了負責顯示邏輯外,最重要的就是與API溝通。在JQuery只要使用$.ajax()就可存取API;但在Angular,則必須透過service與DIcontainer,component才可存取API,完全遵守依賴反轉原則。VersionNode.js8.9.0Angular5.1.0JSONServer0.12.1UserStoryAddPost:使用POST對API新增資料ShowAllPosts:使用GET對API抓資料ArchitectureAppComponent:專門負責顯示邏輯PostService:專門負責連接API與資料處理部份IPostService:由AppComponent觀點所定義出的interfaceHttpClient:Angular4.3所新增處理AJAX的class依賴反轉原則高階模組不應該依賴低階模組;兩著都應該依賴高階模組所定義的interface
Vue2.0系列(四)Vue 组件及父子组件通信
什么是组件?vue中的组件其实就是页面组成的一部分,好比是电脑中的每一个元件(如硬盘,键盘,鼠标),它就是一个具有独立逻辑或界面,同时又能根据规定的接口规则进行相互融合,变成一个完整的应用。页面就是由一个个类似这样的部分组成的,比如导航,列表,弹窗,下拉列表等。页面只不过是这些组件的容器,组件自由组合形成功能完整的界面,当不需要某个组件,或者想要替换某个组件时,可以随时进行替换和删除,而不影响整个应用的运行。前端组件化的核心思路就是将一个巨大复杂的东西拆分成颗粒度合理的小东西。使用组件的好处?1、提高开发效率2、方便重复使用3、简化调试步骤4、提升整个项目的可维护性5、便于协同开发vue中的组件vue中的组件是一个自定义标签,vue.js的编译器为它添加特殊功能vue中的组件也可以扩展原生的html元素,封装可重用的代码组件的基本组成:样式结构,行为逻辑,数据注册组件全局注册可以在任何模板中使用,使用之前要先注册语法:使用Vue.compontent(组件名,选项对象)组件名命名约定:驼峰,烤串在html中使用组件:使用烤
Vue2.0系列(五)slot分发内容与props验证
使用一种方式混合父组件的内容与子组件自己的模板,这个过程被称为“内容分发”。在子组件中使用特殊的自定义组件