热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于gokit的微服务项目骨架ko

前段时间发布了一个小小的web开发项目骨架morningo,性能与效率齐飞,开发速度在短暂时间熟悉go语言后应该是匹配php,ruby等这些脚本语言,而后期项目并发性能,基本并发到

前段时间发布了一个小小的web开发项目骨架morningo,性能与效率齐飞,开发速度在短暂时间熟悉go语言后应该是匹配php,ruby等这些脚本语言,而后期项目并发性能,基本并发到上千乃至上万tcp连接没问题。但从业务架构层面看,项目再发展,数据库存在瓶颈,单体项目耦合度高,可维护性差,可延展性差,存在很多问题。因而项目早期可以采用单体架构,但后期仍然推荐的是面向服务的分布式架构。分布式的架构模式虽然带来了增加的代码量,服务间沟通的成本,但整体项目更具有弹性,延展性更好。

项目地址:https://github.com/chenhg5/ko

gokit介绍

go语言的优点不用赘述,那么基于go的微服务框架有吗?gokit就是一个go语言相关的微服务工具包。它自身称为toolkit,并不是framework。也就是gokit是将一系列的服务集合在一起,提供接口,从而让开发者自由组合搭建自己的微服务项目。基本上看完gokit的例子就可以动手模仿着写一个类似的小项目。gokit的结构分为:

《基于gokit的微服务项目骨架ko》

transport

决定用哪种方式提供服务请求,一般就是 http,rpc

endpoint

是gokit最重要的一个层,是一个抽象的接收请求返回响应的函数类型。在这个定义的类型里面会去调用service层的方法,组装成response返回。而gokit中的所有中间件组件都是通过装饰者设计模式注入的。

type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error)
func(log Logger, in endpoint.Endpoint) endpoint.Endpoint {
return func(ctx context.Context, req interface{}) (interface{}, error) {
logger.Log("input", toJSON(req))
resp, err := in(ctx, req)
logger.Log("output", toJSON(resp), "err", err)
return resp, err
}
}

service

所有的具体方法写在这里,可以理解为单体web框架中的控制器部分。

工具包

这三个层组成一个gokit微服务应用。此外,作为一个工具包,gokit为此提供了很多微服务工具组件。

《基于gokit的微服务项目骨架ko》

  • 认证组件(basic, jwt)
  • 回路熔断器
  • 日志组件
  • 普罗米修斯监控系统
  • 限流器
  • 服务发现系统接口(etcd, consul等)
  • 路由跟踪
  • …

这些组件大大方便了我们开发一个微服务应用。

关于ko

ko是一个基于gokit的微服务架构应用开发骨架。一个基本的微服务架构包括:分发层api网关,监控系统,日志系统,服务提供层等。ko的目的是提供一个架构参考,从而减短开发者上手微服务架构的时间,最终是想提供一个思路让开发人员能够在极短的时间内架构起一个正式环境完备功能的微服务架构应用,并可以马上着手于开发业务功能。同时,避免与各种基础服务之间耦合度过高,提供灵活的服务定制接口给开发者。ko会在gokit的基础上,会提供一个解耦且功能完备的Api网关,带有数据连接等功能完备的服务层,以及辅助项目构建的命令行脚手架工具。目前ko还在不断完善开发中,会在本文中更新进度。附传统的基础模型架构图。

《基于gokit的微服务项目骨架ko》

参考资料

[1] https://www.jianshu.com/p/cff…
[2] https://www.jianshu.com/p/0c3…
[3] https://gokit.io/faq/


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
author-avatar
Cindere丷lla_茹满
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有