基于Go技术栈的微服务构建
本文来自于技术网站,本文的素材来源于我们在开发中的一些最佳实践案例,从开发、监控、日志这三个角度介绍了一些我们基于Go技术栈的微服务构建经验。在大型系统的微服务化构建中,一个系统会被拆分成许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种构建形式中,开发者一般会聚焦于最大程度解耦模块的功能以减少模块间耦合带来的额外开发成本。同时,微服务面临着如何部署这些大量的服务系统、如何运维这些系统等新问题。本文的素材来源于我们在开发中的一些最佳实践案例,从开发、监控、日志这三个角度介绍了一些我们基于Go技术栈的微服务构建经验。开发微服务的开发过程中,不同模块由不同的开发者负责,明确定义的接口有助于确定开发者的工作任务。最终的系统中,一个业务请求可能会涉及到多次接口调用,如何准确清晰的调用远端接口,这也是一大挑战。对于这些问题,我们使用了gRPC来负责协议的制订和调用。传统的微服务通常基于http协议来进行模块间的调用,而在我们的微服务构建中,选用了Google推出的gRPC框架来进行调用。下面这张简表比较了http
Google Architecture ViewModel
你需要处理配置变化笔者认为,用户可以随时改变配置(i.e旋转屏幕,切换语言,切换系统文字大小...),这可能会导致当前Activity重建,这些都不受开发者的控制,但是你又不得不处理它可能很多APP在配置清单文件中申明了每一个Activityorientation=portrait,但是你无法禁止用户去改变语言、文字大小。这样就可能会导致Activity被移除或者重新创建为什么onSaveInstanceState依旧不够传统的做法都是在配置发生变化即onSaveInstanceState方法去savedata,在onCreate去restoredata但是这里有两个限制onSaveInstanceState方法不能够缓存较大的数据,笔者之前尝试缓存上百兆数据发现抛出了TransactionTooLargeException保存的数据一定需要实现serializable或者Parce
架构设计 - 自动化运维之架构设计六要点
摘要:运维自动化是我们所渴望获得的,但是我们在一味强调自动化能力时,却忽略了影响自动化落地的一个关键因素。那便是跟运维朝夕相处,让人又爱又恨的业务架构。因为业务架构是决定运维效率和质量的关键因素之一,所以我想跟大家一起聊一下怎么样的架构设计是对运维友好的。运维自动化是我们所渴望获得的,但是我们在一味强调自动化能力时,却忽略了影响自动化落地的一个关键因素。那便是跟运维朝夕相处,让人又爱又恨的业务架构。因为业务架构是决定运维效率和质量的关键因素之一,所以我想跟大家一起聊一下怎么样的架构设计是对运维友好的。结合这些年在腾讯遇到的业务架构和做运维规划时对业务非功能规范的思考,我们可以把面向运维的架构设计分成六大设计要点。要点一:架构独立任何架构的产生都是为了满足特定的业务诉求,如果我们在满足业务要求的同时,能够兼顾运维对架构管理的非功能性要求。那么我们有理由认为这样的架构是对运维友好的。站在运维的角度,所诉求的架构独立包含四个方面:独立部署,独立测试,组件化和技术解耦。①独立部署指的是一份源代码,可以按照便于运维的管理要求去
MySQL数据库主从分离的配置方法
介绍MySQL数据库设置读写分离,可以使对数据库的写操作和读操作在不同服务器上执行,提高并发量和响应速度。现在的网站一般大点的,都采用有数据库主从分离、读写分离,既起到备份作用也可以减轻数据库的读写的压力,一直听说过这些,但是从来没有亲自动手实践过,今天有时间实践一下,记录下过程。环境准备我准备了两台服务器,一个是本机PC,一个是远程服务器,分别在两台机子上装有Mysql数据库。MySQL安装我就不介绍了,这里需要注意的是:MySQL安装的版本最好一致,如果不一致,低版本向高版本读的时候可能有问题,最好保持一致。主库master服务器:172.10.10.69CentOS7Linux系统,mysql版本5.6.35从库slave本机:172.10.10.240Win7系统,mysql版本5.6.35
MySQL性能调优技巧
原文:MySQLPerformanceTuningTipsfortheShoppingSeason作者:ShreeNair翻译:无阻我飞扬摘要:针对购物旺季网站流量会对数据库造成的压力,作者给出了MySQL性能调优的一些技巧,这些技巧极具参考价值,通过这些调优,可以有效避免因为流量过大造成服务器宕机,从而给企业造成经济损失。以下是译文万圣节已经过去很久了,该是把注意力集中在即将到来的假日季节的时候了。首先是感恩节,接着就是黑色星期五和网络星期一,最终在圣诞节/节礼周(从12月26日的节礼日开始,到12月31日的除夕结束为期六天或更长时间。这个词是由零售业在2000年代中期左右发明的,试图延长他们的节礼日销售)达到购物高潮。对于企业主来说,一年的这个时候标志着人们期待已久的年底获利了结。对于一些DBA来说,它会带来恐惧,不安,甚至是不眠之夜,他们要努力使系统重新上线。值得庆幸是,情况并非如此。通过对MySQL性能变量做一些主动调整,可以使数据库服务器免受购物旺季带来的需求增加的冲击。技
再也不学AJAX了!(三)跨域获取资源 ② - JSONP & CORS
浏览器的“同源策略”固然保障了互联网世界的数据隐私与数据安全,但是如果当我们需要使用AJAX跨域请求资源时,“同源策略”又会成为开发者的阻碍。在本文中,我们会简单介绍需要跨域请求资源的两种情景,然后,详细解释目前主流的四种跨域请求资源方案。让我们开始吧!一、何时需要跨域试想,当我们拥有多个站点,并且这些站点又经常共享相同的数据,那么为每个站点存储一份数据看起来就蠢透了。更好的方案是,我们建设一台静态资源存储服务器,然后让我们的所有站点都从这一台服务器上获取资源。很理想的方案,但是现实中,我们首要解决的问题便是浏览器的“同源策略”,别忘了,不同域之间无法通过AJAX技术获取资源。这是需要跨域获取资源的主要情景。另外,站在互联网“开放,平等,自由”精神的角度上讲,如果所有人的数据都被设置为只有同域才能访问,那么互联网世界未免也太无聊了,如果我就是想要与更多的人分享我的数据,难道不应该有办法让我做到这一点吗?当然有办法,下面我们就将一一解释当下主流的跨域请求资源方式。二、跨域请求资源方案我们将主要介绍以下四种跨域请求资源的方案,并逐
自己动手做一个识别手写数字的 Web 应用(五):图像处理
往期的4篇已经把Docker+Keras+Flask+JS的全栈+深度学习介绍完整了:自己动手做一个识别手写数字的web应用01自己动手做一个识别手写数字的web应用02自己动手做一个识别手写数字的web应用03自己动手做一个识别手写数字的web应用04今天更新一篇关于:图像处理。再回顾下MNIST手写字数据集的特点:每个数据经过归一化处理,对应一张灰度图片,图片以像素的重心居中处理,28x28的尺寸。上一篇文章中,对canvas手写对数字仅做了简单对居中处理,严格来说,应该做一个重心居中的处理。今天就介绍下:如何实现前端的手写数字按重心居中处理成28x28的图片格式。我们先把前端canvas中的手写数字处理成二值图,求重心主要运用了二值图的一阶矩,先来看下零阶矩:二值图在某点上的灰度值只有0或者1两个值,因此零阶矩为二值图的白色面积总和。只要把上文的公式转为JS代码,即可求出重心坐标:SignaturePad.prototype.
HTTP和WebSocket之间难舍难分的关系
这段时间在工作当中首次涉及到了websocket协议,颇为感兴趣,因此希望给大家分享一下,其与原始的http协议的区别以及websocket的优点。首先HTMl5指的是一系列新的API,或者说新规范,新技术。WebSocket是HTML5中新协议、新API。Http协议本身只有1.0和1.1,也就是所谓的Keep-alive,把多个Http请求合并为一个。那么为什么说http协议并不是一个持久连接的协议呢?(1)Http的生命周期通过Request来界定,也就是Request一个Response,那么在Http1.0协议中,这次Http请求就结束了。在Http1.1中进行了改进,是的有一个Keep-alive,也就是说,在一个Http连接中,可以发送多个Request,接收多个Response。但是必须记住,在Http中一个Request只能对应有一个Response,而且这个Response是被动的,不能主动发起。(2)WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Ht
精挑细选12款大气的HTML5/CSS3应用
上周我们也整理了不少精美的HTML5/CSS3应用插件,包括图片特效、网页菜单、Tab选项卡、按钮特效等。今天我们精选了12款大气的HTML5/CSS3应用插件,分享给大家。1、CSS3华丽的Tab菜单带小图标动画之前我们分享过一款非常出色的CSS3Tab菜单HTML5SVGTab滑块菜单,结合SVG,Tab菜单实现非常灵活。今天我们要再来分享一款基于CSS3的华丽Tab菜单,这款Tab菜单的菜单项是一个个小图标,鼠标滑过时,菜单项展示对应文字,并出现展开的动画。在线演示/源码下载2、CSS3二级下拉动画菜单菜单背景滑动动画我们以前收集了很多漂亮的CSS3菜单,尤其是多级下拉菜单,像纯CSS3垂直动画菜单、CSS3LavaLamp动画下拉菜单效果都还不错,也挺实用的。今天我再来分享一款CSS3二级下拉动画菜单,这款CSS3菜单的特点是在菜单展开时,菜单的背景会出现滑动的动画效果。在线演示/源码下载3、HTML5摆动的文字特效类似柳枝摆动之前我们在html5tricks上分享过一些HTML5
初探 amaze-vue( 基于vue.js封装的Amaze UI 组件库)
将dist目录下的文件拷贝到工程目录下进行后引入AMAZEVUE_PATH是将dist目录拷贝到项目后的位置
这是一个warning提示
ASP.NET 数据库访问
新建数据,采用sqlserver数据库usedflx;createtableperson--建立表(namechar(12),idintprimarykey,ageint,sfchar(16)default'worker')droptableperson;--删除表格。insertintopersonvalues('张三',110,25,'manager');insertintopersonvalues('李四',111,25,'manager');insertintopersonvalues('王五',101,26,default);deletefrompersonwhereid=101;--删除差错的数据select*fromperson;
某小公司DevOps落地的实践
前言本次我分享的主题是《某小公司DevOps落地的实践》,先申明一下,因为我们公司规模较小,和在座各位朋友任职的一线互联网公司可能没有可比性。所以,我分享的一部分流程或方案,仅供参考。背景先说下背景,我们公司做的大概可以理解成SAAS服务,即从服务器硬件到系统环境到服务都归我们管。而且每家客户都有很多个性化的需求,在我接手重构前,我们平均半个月才能接入一家,经过我们几个月的改造,我们现在可以接入一家客户大概可以控制在1人天。之前,我们开发流程比较混乱,没有文档,没有各种开发流程,现在我们逐渐规范,形成稳定的流程和体系。java项目改造下面我们聊聊java项目,我们把一个git库中的2个项目(接口、后台管理)进行拆分1.接口服务2.后台服务3.html5包4.公共包服务我们主要做了前后端分离,代码git库分支化管理。【事实上大部分小公司都可以这么拆分】我们采用和其他公司不同的方式,定义公共版为主分支,为每个客户建立1个额外分支(事实上分为开发分支、集成分支),发现公版的bug,到主分支改,改完后合并到各个分支,这
3D WebGL入门之材料
我们生活在一个被材料包围的世界,在Three.js中有非常多材料供我们使用,也非常多的参数可配置。以我的经验来看,每个人都会经历被材料支配的恐惧。所以在这篇文章中,我会避免说太多的东西。取而代之,我会介绍一些关于材料很有用的案例,希望对于你有所帮助。首先什么是材料?Three.js官方文档最简洁的解释:材料用于描述物体的外表。就像在真实世界的物体,材料决定了物体是怎样出现在3D世界的。在文章的后面,我们通过材料来定义物体的颜色,材质,以及如何反射光线。这里有一些很棒的材料普通网格材料(MeshNormalMaterial)普通网格材料不是最有用的材料,因为你可以控制地方很少,这是因为网格平面的颜色是由它的位置决定的。它可以制作一些彩虹颜色的物体,我非常喜欢:)值得注意的是这个材料不受光源影响。`varmaterial=newTHREE.MeshNormalMaterial();`SeethePenIcosahedronwithMeshNormalMaterialbyRachelSmith(@rachsmi
使用vue-cli的webpack模板的一次优化
使用过vuejs的开发者一定对vue-cli不陌生,这个命令行工具提供了几个常用的搭建项目的模板,目前官方支持6个模板:webpackwebpack-simplebrowserifybrowserify-simplepwasimple而使用得最多也是Github上start数最多的模板则是webpack这个模板,它包含的内容也非常丰富:语法校验、css预处理、测试框架等,相对于其它模板而言更适合搭建大型项目。更为良心的是连npm脚本都写好了,开发的时候直接输入npmrundev,开发完成则输入npmrunbuild生成对应的可部署文件。但是当我们真正开始用于大型项目的时候,尤其在引入一些第三方模块之后就会发现一个问题~这是我的一个项目使用默认配置编译后生成的文件目录截图。其中有1个vendor.xxxx.js文件显示颜色为黄色,后面给出一个[big]的警告,文件大小达到981kB!更可怕的是app.xxx.js和vendor.xxx.js在首次加载的时候浏览器都会请求,js文件下载完成之后才
如何处理Express异常?
译者按:根据墨菲定律:“有可能出错的事情,就会出错”。那么,既然代码必然会出错,我们就应该处理好异常。原文:HowtohandleerrorsinExpress译者:Fundebug为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。处理异常是编程非常重要的一点。我们的程序依赖于第三方服务、数据库以及我们的用户,一切都不可预料。数据库可能会宕机,第三方服务可能会崩溃,用户可能会使用错误的参数调用我们的接口。为了处理各种复杂的情况,我们必须处理好代码异常,下面是代码示例:app.get('/users/:id',(req,res)=>{constuserId=req.params.idif(!userId){returnres.sendStatus(400).json({error:'Missingid'})}Users.get(userId,(err,user)=>{if(err){returnres.sendStatus(500).json(er
异步任务中的重新进入(Reentrancy)
一个按钮,点击执行一个任务。我们可能直接在它的Click事件中写下了执行任务的代码。一般我们无需担心这样的代码会出现什么问题——但是,这样的好事情只对同步任务有效;一旦进入了异步世界,这便是无尽的BUG!重新进入(Reentrancy)privatevoidButton_Click(objectsender,RoutedEventArgse){DoSomething();}privatevoidDoSomething(){//同步任务。}▲以上,在按钮点击事件中执行同步任务上面的代码,无论我们在界面上多么疯狂地点击按钮,因为UI会在任务执行的过程中停止响应,所以DoSomething只会依次执行(还会偶尔忽略一些)。这通常不会造成什么问题,但如果DoSomething变成异步的DoSomethingAsync(就像下面那样),那么情况就变得不同了。privateasyncvoidButton_Click(objectsender,RoutedEventArgse){awa
【C#入门教案-02】用记事本编写第一个C#程序-Hello World
【C#入门教案-02】用记事本编写第一个C#程序-HelloWorld02-用记事本编写第一个C#程序-HelloWorld广东职业技术学院欧浩源【1】进行.NET程序开发的最基本环境配备.NETFramework+代码编辑工具(记事本或Noetpad++等)程序的开发过程:代码编辑、编译链接、程序运行。【2】使用系统自带记事本编写HelloWorld代码Console.WriteLine():向屏幕输出一行信息。Console.ReadLine():向屏幕读取一行信息。另存为:.cs文件;编码选择:UTF-8【3】找到C#命令行编译器-CSC.exe所在的文件夹电脑上装了.NETFramework或者VS集成开发环境,在C盘下,C:\Windows\Microsoft.NET\Framework\的文件夹中,可以看到相应版本的Framework文件夹。找到一个比较高版本的文件夹,进去会看到csc.exe编译器。
ActiveMQ的初步了解
MOM(MessageOrientedMiddleware),分布式系统的集成,指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。JMS(JavaMessageService)Java消息服务,应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。摘要来自百度百科,这里就不对前两个进行赘述,有兴趣的自行Google。:cherries:最后才是ActiveMQ:Apache下的一个非常流行的消息中间件,使用JAVA支持的JMSProvider实现,所以和JAVA程序完全兼容,开发java项目中间件首选。当然ActiveMQ不仅仅支持JAVA,在C++、Dotnet、Python、Php、Ruby、Websocket等多种客户端都可以提供良好的服务。ActiveMQ的使用场景:其实也就是为什么要使用MQ。:watermelon:异步通信不需要即时处理的业务,将其放去消息队列中,在需要处理的时候直接
td-agent 收集日志到kafka的配置
td-agent收集日志到kafka的配置
程序员,在你 40 岁之前,要有个 PlanB
),其中引用了NSF(美国国家卫生基金会)和人口普查局的数据,其中关于软件工程师的职业生涯的数据令人惊讶。大学毕业6年后,57%的计算机毕业生作为程序员在工作;15年后,34%作为程序员在工作;20年后,他们已经步入40岁,这个数字下降到了19%。对比之下,土木工程系的数字分别是61%,52%,52%。(当然这份报告忽略了很多程序员是非计算机系、或者没有上过大学)但不得不承认,软件工程师确实很容易贬值,英特尔总裁兼联合创始人克雷格·巴雷特