Browsed by
月份:2017年7月

【Chris Richardson 微服务系列】使用微服务重构单体应用

【Chris Richardson 微服务系列】使用微服务重构单体应用

编者的话 本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的最后一篇。第一篇介绍了微服务架构模块,并且讨论了使用微服务的优缺点。随后的文章讨论了微服务的不同方面,包括使用 API 网关、进程间通讯、服务发现、事件驱动的数据管理,以及部署微服务。本篇将讨论从单体应用迁移到微服务的策略。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5.微服务的事件驱动数据管理6.选择微服务部署策略7. 将单体应用改造为微服务(本篇文章

使用微服务重构概述

将单体应用转变为微服务的过程也是将应用现代化的过程,数十年来开发者们一直致力于此。因此,当把应用重构为微服务的时候...阅读全文
【Chris Richardson 微服务系列】选择微服务部署策略

【Chris Richardson 微服务系列】选择微服务部署策略

编者的话 本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第六篇文章。第一篇介绍了微服务架构模式,并且讨论了使用微服务的优缺点。随后的文章讨论了微服务的不同方面,包括使用 API 网关、进程间通讯、服务发现和事件驱动的数据管理。这篇文章将深入讨论部署微服务的策略。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5.微服务的事件驱动数据管理6. 选择微服务部署策略(本篇文章7.将单体应用改造为微服务

诱因

部署单体应用意味着运行大型应用的多个相同副本,通常提供若干台(N)服务器(物理机或虚拟机),在每台服务器上运行若干个(M)应用实例。部署单体应用并不总...阅读全文
【Chris Richardson 微服务系列】事件驱动的数据管理

【Chris Richardson 微服务系列】事件驱动的数据管理

编者的话 本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第五篇文章。第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点;第二和第三篇描述了微服务架构模块间通讯的不同方面;第四篇研究了服务发现中的问题。本篇研究微服务架构带来的分布式数据管理问题
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5. 微服务的事件驱动数据管理(本篇文章6.选择微服务部署策略7.将单体应用改造为微服务

微服务以及分布式数据管理中存在的问题

单体应用通常使用单个关系型数据库,由此带来的好处在于应用能够使用 ACID 事务,后者提供了重要的操作特性
  • 原子化:原子粒度的更改...
阅读全文
【Chris Richardson 微服务系列】服务发现的可行方案以及实践案例

【Chris Richardson 微服务系列】服务发现的可行方案以及实践案例

编者的话 本文来自 Nginx 官方博客,是微服务系列的第四篇文章。第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点;第二篇和第三篇描述了微服务架构内部的通讯机制。这篇文章中,我们将会探讨服务发现。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4. 服务发现的可行方案以及实践案例(本篇文章5.微服务的事件驱动数据管理6.选择微服务部署策略7.将单体应用改造为微服务

为什么要使用服务发现

假设我们写的代码会调用 REST API 或者 Thrift API 的服务。为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。运行在物理硬件上的传统应用中,服务实例的网络位置是相对固定的;代...阅读全文
【Chris Richardson 微服务系列】微服务架构中的进程间通信

【Chris Richardson 微服务系列】微服务架构中的进程间通信

编者的话 本文来自 Nginx 官方博客,是微服务系列文章的第三篇,在第一篇文章中介绍了微服务架构模式,与单体模式进行了比较,并且讨论了使用微服务架构的优缺点。第二篇描述了采用微服务架构的应用客户端之间如何采用 API 网关方式进行通信。在这篇文章中,我们将讨论系统服务之间是如何实现通信的。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3. 深入微服务架构的进程间通信(本篇文章4.服务发现的可行方案以及实践案例5.微服务的事件驱动数据管理6.选择微服务部署策略7.将单体应用改造为微服务

简介

在单体应用中,各模块之间的调用是通过编程语言级别的方法或者函数来实现的。而基于微服务的分布式应用是运行在多台机器上的;一般来说,每个服务实例都是一个进...阅读全文
【Chris Richardson 微服务系列】使用 API 网关构建微服务

【Chris Richardson 微服务系列】使用 API 网关构建微服务

编者的话 本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨:微服务架构是如何影响客户端到服务端的通信,并提出一种使用 API 网关的方法。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2. 构建微服务架构:使用 API Gateway(本篇文章3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5.微服务的事件驱动数据管理6.选择微服务部署策略7.将单体应用改造为微服务

简要概述

让我们想象一下,你要为一个购物应用程序开发一个原生移动客户端。你很可能需要实现一个产品详情页面,展示任何指定商品的信息。下图展示了 Amazon Android 应用在商品详情页显示的内容。即使只是个智能手机应用,产品详情页面也显示了大量的信息。该页面不仅包含基...阅读全文
【Chris Richardson微服务系列】微服务架构的优势与不足

【Chris Richardson微服务系列】微服务架构的优势与不足

编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。微服务在当下引起广泛关注,成为文章、博客、社交媒体讨论和大会演讲的热点;在 Gartner 的 “Hype Cycle” 上排名也非常靠前。与此同时,在软件社区也有人质疑微服务并非新事物。反对者认为微服务只是 SOA (Service Oriented Architecture)的二度包装。然而,无论是追捧还是质疑,微服务架构拥有巨大优势,尤其是它让敏捷开发和复杂的企业应用交付成为可能。本系列包含 7 篇文章,介绍了微服务的设计、构建和部...阅读全文
互联网广告实时竞价流程以及术语

互联网广告实时竞价流程以及术语

首先,你要对互联网广告的产业链至少有一个基本的了解。
  • 广告主(advertiser
显然是指想要为自己的品牌或者产品做广告的人,例如:宝马,intel,蒙牛等等,简单说就是需求方。
  • 媒体(publiser
媒体是指提供广告位的载体,例如:电视台,网站,杂志,app应用,简答说就是供应方。
  • 广告商(agency
本质上其实就是中介,帮广告主找媒体广告位,帮媒体找广告主。
  • 受众(audience
这个产业链还有一个不能忽视的部分,那就是“消费”广告的人搞清了产业链,让我们来了解广告的一些基础知识概念RTB(Real Time Bidding也就是“实时竞价”,是现代互联网广告行业中新兴起的一种流量交易方式,有以下几个显著的不同于传统互联网广告的特点
  1. 在用户刚打开流量的载体(App或是Wap站点)的时候,该广告位要显示的东西还尚未确定,只有当竞价结束的时候,才会最终确定实际被展示的内容(Creative)。
  2. 竞价时间非常短,一般100ms之内就要完成,所以对参与各方的技术要求很高
  3. 完全以CPM计价

RTB的优势...

阅读全文
golang使用vendor目录来管理依赖包

golang使用vendor目录来管理依赖包

最新的go推荐使用go mohttp://www.gaoxuan1989.com/2019/07/19/using-go-mod/

Vendor目录介绍

随着Go 1.5 release版本的发布,vendor目录被添加到除了GOPATHGOROOT之外的依赖目录查找的解决方案。在Go 1.6之前,你需要手动的设置环境变量GO15VENDOREXPERIMENT=1才可以使Go找到Vendor目录,然而在Go 1.6之后,这个功能已经不需要配置环境变量就可以实现了。
Note,即使使用vendor,也必须在GOPATH中,在go的工具链中,你逃不掉GOPATH
那么查找依赖包路径的解决方案如下
  • 当前包下的vendor目录。
  • 向上级目录查找,直到找到src下的vendor目录。
  • GOPATH下面查找依赖包。
  • GOROOT目录下查找

一些建议

在使用vendor中,给出如下建议
  1. 一个库工程(不包含main的package)不应该在自己的版本控制中存储外部的包在vendor\目录中,除非他们有特殊原因并且知道为什么要这么做。
  2. 在一个应用中,(包含main的package),建议只有一个vendor目录在代码库一级目录。
上面建议的原因如下
  • 在目录结构中的每个包的实例,即使是同一个包的同一个版本,都会打到最终的二进制文件中,如果每个人都单独的存储自己的依赖包,会迅速导致生成文件的二进制爆发binary bloa
  • 在一个目录的某个pacage类型,并不兼容在同一个package但是在不同目录的类型,即便是同一个版本的package,那意味着loggers,数据库连接,和其他共享的实例都没法工作。

举个例子

工程目录如下
- $GOPATH/src/github.com/mattfarina/golang-broken-vendor- foo.go- vendor/   - a/   - b/       - vendor/a/
在这个例子中,两个apackage都是完全一样的,b package在代码库中保存了a package,在顶级应用代码中也引用了a包。文件foo.go做了很简单的事情:
funmai() vai.i"foo".Di
那么问题来了,当我们build的时候,发现出问题了,返回了下面的错误
$ GO15VENDOREXPERIMENT=1 go build./foo.go:12: cannot use it (type "github.com/mattfarina/golang-broken-vendor/vendor/a".A) as type "github.com/mattfarina/golang-broken-vendor/vendor/b/vendor/a".A in argument to b.Do
你可以clone这个测试...阅读全文
Centos升级php5.3到php5.6

Centos升级php5.3到php5.6

在玩wordpress添加插件的时候,发现有的插件必须要php5.5才能支持,原来使用yum安装了php5.3,所以索性升级到php5.6好了,网上找了一下,下面这个方法可以解决我的问题,贴在这里和大家分享一下。

查看并删除原有的php5.

查看原有php的版本查看已经安装的php包可以看到如下原有的安装包全都是5.3.3-38.el6版本的,如果不删除原有的5.3的包,安装php5.6的包的时候会报冲突的错误。删除5.3的包删除后可以确认一下是否已经完成删除结果应该是空。

安装php5.6的包

由于centos 6.*原有的rpm中不包含5.6的包的资源,所以需要先安装导入PHP的安装源然后安装php 5.6相关的包全部安装成功后确认一下结果如下
php56w.x86_64            5.6.27-1.w6    @webtaticphp56w-cli.x86_64        5.6.27-1.w6    @webtaticphp56w-common.x86_64     5.6.27-1.w6    @webtaticphp56w-gd.x86_64         5.6.27-1.w6    @webtaticphp56w-ldap.x86_64       5.6.27-1.w6    @webtaticphp56w-mbstring.x86_64   5.6.27-1.w6    @webtaticphp56w-mysql.x86_64      5.6.27-1.w6    @webtaticphp56w-odbc.x86_64       5.6.27-1.w6    @webtaticphp56w-pdo.x86_64        5.6.27-1.w6    @webtaticphp56w-soap.x86_64       5.6.27-1.w6    @webtaticphp56w-xml.x86_64        5.6.27-1.w6    @webtaticphp56w-xmlrpc.x86_64     5.6.27-1.w6    @webtatic
重启php-fpm:执行:应当显示5.6。ok升级完毕!阅读全文