高可用架构·LearningasweGo - (EPUB全文下载)
文件大小:1.03 mb。
文件格式:epub 格式。
书籍内容:
版权信息
书名:高可用架构·Learning as we Go(第5期)
本书由北京图灵文化发展有限公司发行数字版。版权所有,侵权必究。
您购买的图灵电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
091507240605ToBeReplacedWithUserId
如何用Go实现Web应用中的微服务
第一部分:设计
方案
第二部分:k/v存储和数据库
结论
用Go构建Teamwork Desk时犯下的菜鸟错误
1. Revel对于我们来说不是一个好的选择
2. 聪明地使用Panic
3. 仔细读取Request.Body不止一遍
4. 有一些持续改善的库可以帮你写SQL
5. 没有指向的指针是没有意义的
6. 裸返回随时可能造成伤害并且让你的代码难以理解(在更大的函数中)
7. 小心作用域和缩略声明
8. 映射和随机崩溃
9. Vendor——宙斯的胡子
学到了很多,但是还有更多需要学习
并发之痛:Thread,Goroutine,Actor
为什么并发程序这么难?
系统里到底需要多少线程?
线程池方案
新的思路
Goroutine
Actor 模型
Golang CSP VS Actor
再扯一下 Rust
结论
Golang并发编程总结
递归锁或者叫可重入锁(Recursive Lock)
锁等待超时机制
Map机制的问题
其他的关于多线程的题外话
如何用Go实现支持数亿用户的长连消息系统
360消息系统介绍
关于push系统对比与性能指标的讨论
消息系统架构介绍
推送的服务端架构
go语言开发问题与解决方案
消息系统的运维及测试
Q&A
Golang在视频直播平台的高性能实践
杨武明:从3000元月薪码农到首席架构师
和优秀的人在一起
走出舒适区
高可用架构部分分享讲师名单(按姓名首字母排序)
如何用Go实现Web应用中的微服务
作者/ Jacob Martin
Jacob是一位波兰高中生,今年17岁。他自打记事开始就对IT技术很着迷,他最近的兴趣点集中在了用Scala和Go做开发上。他写博客的目的是为了给和他一样的人提供一个学习资源,他相信他和他的读者们都将是终身的学习者。
第一部分:设计
简介
“微服务”是最近经常出现的一个热词。你可以爱它,你也可以恨它,但你决不能无视它。在本文中,我们将用微服务架构创建一个Web应用。我们尽量不使用第三方工具和库。但是你需要知道,当你在生产环境中创建Web应用时,使用第三方库确实是个好办法(哪怕只是为了节省时间)。
我们会以基本形式创建各种组件。我们不会使用高级的caching或者database。我们会创建基本的健值存储(key-value store)以及一个简单的存储服务。整个过程我们都将使用Go来完成。
更新:本文只是为了展示一个微服务架构的可扩展工作框架。如果你只是想为照片增加滤镜,那就不要这样设计。杀鸡焉用宰牛刀。
如果进一步考虑,你确实需要这样设计架构。软件存活时间通常比我预想的要长,而这种设计会让我们得到一个可以轻松扩展的Web应用。
功能
首先我们需要决定我们的Web 应用能够做什么。我们将在本文中创建的应用可以从用户那里获取一张图片,然后返回一个独特的ID。图片将会被复杂且高度精细的算法所修改,比如交换红蓝通道,而用户可以使用ID查看照片是已经完成还是正在进行中。如果完成,他可以下载已经修改后的图片。
设计架构
我们想要架构成为微服务,所以我们也应该模仿微服务进行设计。我们必然需要一种面向用户的服务,该服务可以提供和应用通信的界面。这个服务还需要能够处理认证,并且把工作负载重新定向到正确的子服务上。(如果你想给应用集成更多功能的话,这么做是有用的。)
我们还需要一个能够处理我们所有图片的微服务。它可以获取图片,生成ID,存储和每个任务相关的信息,然后保存图片。为了处理高工作负载,我们可以使用主从(master-slave)系统来实现图片修改服务。处理图片的一方将是主(master),然后我们将创建从主站获得工作图片的从属(slave)微服务。
我们还需要一个用于各种配置的键值数据存储、一个用于保存修改前和修改后图片的存储系统,以及一个用于存放每个任务信息的类数据库服务。
这些应该足够我们开始了。
但是我还是要声明一下,如果需要的话,架构在这个过程中还是会改变。如果你觉得哪些地方可以提高也可以留言告诉我。
通信
我们需要定义服务之间的通信方式。在这个应用中我们将会在各个地方使用REST。你也可以使用消息总线(message BUS)或者远程过程调用(RPC),但是我这里就不具体说明了。
设计微服务API
另外一件重要的事就是设计你的微服务API。我们现在来逐个设计一下,顺便了解一下它们每个都是做什么用的。
键值存储
这个微服务主要是为了配置而构建的。它有一个简单的递交(post-get)界面:
POST:
参数:
键
值
响应:
成功/失败
GET:
参数:
键
响应:
值/失败
存储
我们在这里存储图片,然后再次使用键值界面和参数说明来表明图片是修改前还是修改后。为了简洁起见,我们把图片保存在一个以图片状态(已完成/进行中)命名的文件夹中。
POST:
参数:
键
状态:修改前/后
数据
响应:
成功/失败
GET:
参数:
键
状态:修改前/后
响应:
数据/失败
数据库
这个会保存我们的任务。如果它们等待启动、进行中,或已完成。
POST:
参数:
TaskId
状态:尚未开始/进行中/已完成
响应:
成功/失败
GET:
参数:
TaskId
响应:
状态/失败
GET:
路径:
尚未开始/进行中/已完成
响应:
TaskId列表
前端
前端的主要目的是提供不同服务和用户之间的通信方式。前端也可以用来认证和授权。
POST:
路径:
newImage
参数 ............
书籍插图:
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » 高可用架构·LearningasweGo - (EPUB全文下载)