当前位置: 首页 > news >正文

三星网站建设内容海报设计平台

三星网站建设内容,海报设计平台,千图网免费素材图库官网,net实用网站开发大家好#xff0c;我是萧楚河#xff0c;公众号#xff1a;golang面试经典讲解#xff0c;感谢关注#xff0c;一起学习一起成长。一、前言 今年6月#xff0c;一群谷歌员工#xff08;由谷歌软件工程师Michael Whittaker领导#xff09;发表了一篇名为“Towards Mode…大家好我是萧楚河公众号golang面试经典讲解感谢关注一起学习一起成长。一、前言 今年6月一群谷歌员工由谷歌软件工程师Michael Whittaker领导发表了一篇名为“Towards Modern Development of Cloud Applications”的论文。 正如Whittaker等人所指出的从架构上讲微服务本身设置就有问题它是一个没有边界的结构它们将逻辑边界如何编写代码与物理边界如何部署代码混为一谈。这就是问题的开始。 因此谷歌的工程师们提出了一种堪称“微服务2.0”的方法。将应用程序构建为逻辑整体但将其交给自动化运行时后者可以根据应用程序所需的内容和可用的内容来决定在哪里运行工作负载。 基于新提出的结构他们能够将系统的延迟降低15倍成本降低9倍。 “从有组织的模块化代码开始我们就可以将部署架构作为实现细节”Google开发人员倡导者Kelsey Hightower在10月份对这项工作表示了下一步计划。 鉴于以上实践诞生了Service Weaver。 1.1 什么是Service Weaver ServiceWeaver是一个用于编写、部署和管理分布式应用程序的编程框架。您可以在机器上本地运行、测试和调试Service Weaver应用程序然后使用单个命令将该应用程序部署到云中。 Service Weaver应用程序由许多组件组成。组件被呈现为常规Go接口组件之间通过调用这些接口定义的方法来相互交互。这使得编写Service Weaver应用程序变得容易。你不需要编写任何联网或序列化代码你只要写Go。Service Weaver还提供用于日志记录、度量、跟踪、路由、测试等的库。 1.2 什么是模块单体应用 对于不熟悉的人来说模块化单体应用是一种体系结构其中整个应用程序都写成一个单独的应用程序在一个单一的代码库中。模块化方面意味着单体应用被分成单独的组件并且在不同组件之间有干净明确的接口。 这里是一个例子 在这个单体应用中有三个组件订单、支付和运输。每个组件实现单体应用的一个特定部分关键在于每个组件的大部分都是私有的并且组件之间的任何通信都是通过明确定义的接口进行的。 这使得每个组件的内部可以进行更改和更新而不会影响任何其他组件假设接口未更改或破坏。 当多个团队在单体应用上工作时这确实有助于在团队之间设定明确的边界并使每个组件独立于其他任何组件发展同时在组件之间显示明确的依赖关系。 每当你的单体应用被部署时它都被部署为一个单一的应用程序每个单体应用的实例都运行一个单一的进程。例如如果你要部署到AWS每个单体应用的实例都将作为一个进程运行在EC2实例上。 二、Service Weaver工作原理 2.1 与模块化单体应用区别 Service Weaver和传统的模块化单体应用之间的区别在于部署方式。使用Service Weaver构建的应用程序在部署时不是将所有组件运行在同一台机器上的一个大进程。 相反每个组件都作为一个独立的微服务进行部署。这非常巧妙因为您既可以获得将所有代码放在单个代码库中并进行方便的本地开发的好处又可以获得运行分布式架构的好处其中您可以根据需要缩放每个组件例如内存CPU和实例数量等。 2.2 如何工作的 ServiceWeaver的核心抽象是组件。组件就像一个参与者ServiceWeaver应用程序是作为一组组件来实现的。具体地说组件用一个常规Go接口表示组件通过调用这些接口定义的方法来相互交互。 2.2.1 单组件 在本节中我们将定义一个简单的hello组件它只打印一个字符串并返回。首先运行go mod init hello来创建一个go模块。 mkdir hello/ cd hello/ go mod init hello然后创建一个名为main.go的文件其中包含以下内容package main import ( “context” “fmt” “log” github.com/ServiceWeaver/weaver) func main() { if err : weaver.Run(context.Background(), serve); err ! nil { log.Fatal(err) } } // app is the main component of the application. weaver.Run creates // it and passes it to serve. type app struct{ weaver.Implements[weaver.Main] } // serve is called by weaver.Run and contains the body of the application. func serve(context.Context, *app) error { fmt.Println(“Hello”) return nil } 在构建和运行应用程序之前我们需要运行ServiceWeaver的代码生成器称为weavergenerate。weavergenerate编写一个weaver_gen.go文件其中包含ServiceWeaver运行时所需的代码。我们将详细说明weaver generate到底做了什么以及为什么我们稍后需要运行它。最后运行应用程序 $ go mod tidy $ weaver generate . $ go run . Hello2.2.2 多组件 在ServiceWeaver应用程序中任何组件都可以调用任何其他组件。为了演示这一点我们引入了第二个Reverser组件。创建一个文件Reverser.go。转到以下内容 package mainimport (contextgithub.com/ServiceWeaver/weaver )// Reverser component. type Reverser interface {Reverse(context.Context, string) (string, error) }// Implementation of the Reverser component. type reverser struct{weaver.Implements[Reverser] }func (r *reverser) Reverse(_ context.Context, s string) (string, error) {runes : []rune(s)n : len(runes)for i : 0; i n/2; i {runes[i], runes[n-i-1] runes[n-i-1], runes[i]}return string(runes), nil }Reverser组件由Reverse接口表示该接口具有反转字符串的Reverse方法。reverser结构是我们对reverser组件的实现如weaver.Implements[Reverser]所示它包含的字段。 接下来在main.go中编辑应用程序组件以使用reverser组件 package mainimport (contextfmtloggithub.com/ServiceWeaver/weaver )func main() {if err : weaver.Run(context.Background(), serve); err ! nil {log.Fatal(err)} }type app struct{weaver.Implements[weaver.Main]reverser weaver.Ref[Reverser]hello weaver.Listener }func serve(ctx context.Context, app *app) error {// Call the Reverse method.// The hello listener will listen on a random port chosen by the operating// system. This behavior can be changed in the config file.fmt.Printf(hello listener available on %v\n, app.hello)// Serve the /hello endpoint.http.HandleFunc(/hello, func(w http.ResponseWriter, r *http.Request) {name : r.URL.Query().Get(name)if name {name World}reversed, err : app.reverser.Get().Reverse(ctx, name)if err ! nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}fmt.Fprintf(w, Hello, %s!\n, reversed)})return http.Serve(app.hello, nil) }应用程序结构有一个类型为weaver.Ref[Reverser]的新字段提供对反向器组件的访问权限。 2.2.3 多进程执行 我们已经了解了如何通过go run在单个流程中运行Service Weaver应用程序。现在我们将在多个进程中运行我们的应用程序在作为RPC执行的组件之间进行方法调用。首先创建一个名为weaver.toml的TOML配置文件其中包含以下内容 [serviceweaver] binary ./hello[multi] listeners.hello {address localhost:12345}此配置文件指定ServiceWeaver应用程序的二进制文件以及hello侦听器的固定地址。接下来使用weaver multi-deploy构建并运行应用程序 go build # build the ./hello binary weaver multi deploy weaver.toml # deploy the application2.3 微服务如何组合 我发现图表有助于理解的一个例子这是Google解释了这些不同部分如何组合在一起的图表 我们还没有谈到 Service Weaver 框架的多功能性。传统微服务的一个缺点是你经常会遇到接口过于频繁的问题。毕竟没有人能预见架构的演变方向。 然后你不得不忍受增加的延迟和更高的网络调用失败率或者花时间将这两个微服务合并起来。 使用 Service Weaver这个问题得到了解决。如果你查看上面的图表你会发现有四个模块被定义了。当部署为微服务时你会注意到 A 和 B 住在一起C 和 D 是他们自己的微服务。 使用 Service Weaver你可以自由地定义组件在哪里部署。你可以选择让多个组件一起运行在单个微服务中或者将所有组件都部署为单独的微服务。如果你的应用程序演变到两个组件变得过于频繁并且作为单独的微服务运行你可以轻松地将它们合并而不需要改变代码并在 Service Weaver 中快速更改配置。 三、Service Weaver使用 这里基于我的理解对Service Weaver的初步介绍鉴于很多人可能希望自己实践一下可以通过如下地址进入官方网站进行学习https://serviceweaver.dev
http://www.zqtcl.cn/news/167146/

相关文章:

  • 网站建设免费国外撤销网站备案申请书
  • 佛山做网站那家好网站建设公司如何盈利
  • 傻瓜建网站设计感网站
  • 北京网站优化软件陕西省建筑信息平台
  • 广州越秀建网站济南房产网新开楼盘
  • 线上咨询预约网站建设方案保定外贸网站制作
  • 网站流量如何增加提高工作效率的措施
  • 龙湖镇华南城网站建设.net 网站开发书籍
  • 域名费用和网站服务器费用是同样的吗推广营销方案
  • 安徽网站设计方案中文外贸网站有哪些
  • 衡阳手机网站设计响应式网站做多大的尺寸
  • 海尔电子商务网站建设预算灵台县门户网
  • 四川网站建设设计公司排名开发公司与建筑公司合作协议
  • 江西智能网站建设嘉定注册公司
  • 海口网站建设联系方式十大免费软文推广平台
  • 石碣镇做网站帮别人做网站开价
  • 站长 网站ip客户都不愿意做网站
  • 网站开发和软件开发哪个难网站备案账号
  • 2昌平区网站建设安徽盛绿建设网站
  • 商务网站建设目的天津建设网站需要的费用
  • flash 网站头部wordpress支持大文件上传
  • 网站开发方式的选择凡客设计
  • 常德建设网站如何查询某个网站的设计公司
  • wordpress 仿站教程学校ui设计培训
  • 南昌模板建站定制网站合肥瑶海区网站建设价格
  • 奥尔马手表官方网站导出wordpress文章
  • 网站栏目内容和功能手机网站建设 如何获得更好的排名
  • 网站运营推广难做常德网警
  • 北滘网站建设公司在百度上做网站怎么做
  • 合肥网站建设 毅耘园林设计网站大全