zoukankan      html  css  js  c++  java
  • MO3 Netlify for backend

    原文

    今天,Netlify 已经成为快速构建 web 应用程序的现代平台,无需担心代码之外的任何事情。我们 Micro 是 Netlify 的用户,我们已经接受了这种非凡的体验。更重要的是,Netlify 已经向我们展示了一个经典 web 架构堆栈,该堆栈以前将 web 和 api 的关注点合并在一个地方。当我们通过一个分层架构前端时,除了如何从后端消费动态内容的提示之外,我们没有得到任何东西。今天我们都称之为 Jamstack

    Jamstack

    img

    Credit jamstack.org

    jamstack 通过将静态内容和动态内容分离,并推动通过 api 和服务消费动态内容,对前端架构进行了重新思考。实际上,Netlify 采用了这种模型,试图为前端构建微服务,并通过后端 api 实现服务消费的统一。很明显,这是未来 web 的架构,大部分云服务将仅仅作为 api 来构建和使用。

    我们经常看到的一个问题是 “Netlify 的后端是什么?” 许多在 Netlify 上构建 Jamstack 应用的前端用户正在寻找他们可以找到并构建这些 api 的地方。似乎连 Netlify 目前的回答都是:“去 heroku 上主持点什么吧”。我认为到 2020 年,这是行不通的。如果前端被重新设计,那么同样的事情也会发生在后端,以满足用户的需求。

    Netlify for the Backend

    img

    M3O 是云服务开发平台。在不管理基础设施的情况下构建 api 的最快方法。M3O 利用 Micro,这是一个用于微服务开发的开放源码平台。我们从 Micro 得到的是一个强大的框架,用于构建、运行和使用 api 作为微服务。M3O 提供的是 Micro as a Service,这是一个用于构建微服务的完全受管理的平台。在后台用 Go 和 gRPC 编写服务,通过 HTTP API 动态地公开它们,供前端使用。M3O 希望能填补前端开发者市场的空白。M3O 是用于后端的 Netlify。

    M3O Features

    如前所述,M3O 是一个完全托管的 Micro 服务平台。这是什么意思?Micro 提供了编写、运行和使用微服务的构建块。从源头到奔跑和超越。M3O 接受它并托管它,因此您可以继续编写 api,而不必担心底层基础设施。

    以下是一些关键功能和服务:

    • Microservices development 使用 gRPC 和 protobuf 代码生成
    • Service runtime和流程生命周期管理
    • Source to running 在不需要 CI/CD 的情况下
    • Authentication and authorization 用于访问控制和用户管理
    • Dynamic configuration 和 secrets 管理
    • PubSub messaging 和事件流
    • Service discovery 和 secure networking
    • Key-value storage 和 CRUD 操作
    • Automatic HTTP routing 基于路径的解析
    • Identity aware proxy 用于远程访问和 gRPC-web 应用程序
    • Public API gateway 和 TLS 默认支持
    • Public and private repos 支持包括 github, gitlab 和 bitbucket

    M3O 是一个功能完整的微服务开发平台,从在本地机器上生成服务模板,到在云中编写和运行它,所有这些都使用相同的 Micro CLI 体验。M3O 默认情况下动态地为您公开 HTTPS url。因此,一旦部署,每个服务就会自动成为 API。

    当一个新的前端开发模型出现时,我们认为它决定了后端“无头”范式的转变,而 M3O 想要在那里托管所有这些 api 作为微服务。

    API First

    img

    从 AWS 一直到 Twilio 和 Stripe,我们看到 api 的出现成为云服务的主导因素。更引人注目的是,虽然这种模式在过去几年才出现,但我们才刚刚开始。我们相信,从现在开始的十年内,一些最重要的公司将会首先使用 API,但奇怪的是,还没有平台来满足这种开发形式。

    Twilio、Stripe 和其他一些公司都必须为他们的 API first 方法构建基础设施。我们认为,随着越来越多的公司走上这条道路,必须出现工具来增强它们的能力,不仅在计算层,而且通过提供所需的更高层次的抽象。这就是 M3O 的目标。

    但不要只相信我们的话。我们将向您演示其价值主张,这样您就可以亲眼看到 Micro 和 M3O 有多么强大。

    Building a backend

    编写和部署 api 需要几分钟,而不是几小时或几天!我们不再在后端处理基础设施,就像 Netlify 在前端授权开发者一样,我们也在在后端为新一代的开发者做同样的事情。

    让我们带你看一看。我们将在 Netlify 上部署一个现有的微博服务,并使用这个演示前端:https://loving-goodall-44ee08.netlify.app/。但首先让我们从注册开始。

    Signup to M3O

    首先你要注册 M3O 并在我们的开发环境中注册一个免费帐户。

    从安装 micro 开始

    curl -fsSL https://install.m3o.com/micro | /bin/bash
    

    对于那些担心将 curl 转换为 bash 的人,您可以首先查看它 https://install.m3o.com/micro。

    目前,注册完全是基于 CLI 的,所以只需发出以下命令并执行步骤

    micro signup
    

    一旦你完成了,你应该在 M3O 上有一个帐户并自动登录。

    Run Helloworld

    通过运行 helloworld 验证这一点。

    micro run github.com/micro/services/helloworld
    

    检查它是否运行,并尝试通过 CLI 调用它。

    # check the status
    micro status
    
    # call helloworld
    micro call helloworld --name="Alice"
    

    现在我们来看看更有趣的部分。通过为您动态生成的 HTTP API 调用它。

    # get your namespace
    NAMESPACE=$(micro user namespace)
    
    # curl your unique url
    curl "https://$NAMESPACE.m3o.com/helloworld?name=Alice"
    

    如果一切都好,我们可以继续运行一些更有趣的东西。

    Deploying a dynamic blog backend

    我们将部署一个无头 CMS,或者更广为人知的博客 API。

    在开放源码方面,Micro 维护了一些可重用的示例服务,我们都可以使用这些示例服务并对其做出贡献。你可以在 github.com/micro/services 查看它们。让我们用其中的几个来引导这个博客。

    因为 Micro 是关于微服务开发的,所以我们将博客 API 分解为帖子、评论和标签。现在,我们将重点关注帖子和标签。您可以在 https://github.com/micro/services/tree/master/blog 中找到代码。

    部署它们非常简单。

    # run the posts service
    micro run github.com/micro/services/blog/posts
    
    # run the tags service
    micro run github.com/micro/services/blog/tags
    

    使用 micro status 检查它们是否在运行。您应该看到从开始、构建到运行的状态进展。如果你想看日志或任何相关的事情,只要 micro logs posts,对任何其他服务的名字相同。

    Write a post on the CLI

    一旦服务运行,就可以立即通过 CLI 以动态命令的形式调用它们。

    保存一个快速贴子:

    micro posts save --id=1 --title="My first post" --content="This is pretty epic"
    

    帖子列表:

    micro posts query
    

    同样的调用也可以通过 API 进行,只要知道你的名称空间:

    Call it via the HTTP API

    现在,这是它变得很酷的地方,更重要的是,你将从运行在 Netlify 上的前端应用调用什么。首先像前面一样获取您的名称空间。

    $ micro user namespace
    random-example-namespace
    

    使用 curl 调用:

    $ curl -H "Micro-Namespace: random-example-namespace" https://api.m3o.dev/posts/query
    {
      "posts": [
        {
          "id": "1",
          "title": "My first post",
          "slug": "my-first-post",
          "content": "This is pretty epic"
        }
    }
    

    通用的 api.m3o.dev url 要求我们传入我们的名称空间,所以我们查询我们自己的服务,但每个名称空间也有自己的唯一 url,所以你不必担心在前端代码。只需将namespace + m3 .dev 编写为 random-example-namespace.m3o.dev

    $ curl https://random-example-namespace.m3o.dev/posts/query
    {
      "posts": [
        {
          "id": "1",
          "title": "My first post",
          "slug": "my-first-post",
          "content": "This is pretty epic"
        }
    }
    

    就是这样!现在,前端的后端在 M3O 上运行。

    为了好玩,让我们部署示例前端至 Netlify。

    Deploying the frontend to Netlify

    frontend 是一个简单的 angular 应用程序,我们把它放在一起来验证这个前提:

    Netlify for the frontend, Micro for the backend

    您可以在 github.com/m3o/blog-frontend 中找到代码,但是我们现在将带您完成安装。 loving-goodall-44ee08.netlify.app 下托管站点的部署设置如下:

    Build settings

    img

    为了方便使用,您可以复制下面的设置。在你看到 'concert-celtic-uncover' 的地方,将它与您的名称空间从 micro user namespace 在CLI。我们需要知道要调用什么后端 API。

    Repository        github.com/m3o/blog-frontend
    Base directory    Not set
    Build command     sed -i 's/micro/concert-celtic-uncover/g' ./src/environments/environment.prod.ts && ng build --prod && cp ./src/assets/_redirects ./dist/blog-frontend
    Publish directory dist/blog-frontend
    

    如您所见,在示例中部署的是最初的 m3o/blog-frontend,但在您的示例中,“m3o” 将被您的 fork 替换。这是因为 Netlify 要求获得 repo 的权限。

    构建命令有点复杂,下面是它在做什么:

    # Replace the micro namespace with your own
    namespace=$(micro user namespace)
    
    sed -i "s/micro/$namespace/g" ./src/environments/environment.prod.ts
    
    # It's an angular app, so we have to ng build
    ng build --prod
    
    # Single page applications need a redirect file
    cp ./src/assets/_redirects ./dist/blog-frontend
    

    完成后,它构建成功,您的 web 应用程序应该是活的!

    别忘了从你的终端添加帖子。

    Create a new post

    # Add a post
    micro posts save --id=1 --title="My first post" --content="This is pretty epic"
    
    # query posts
    micro posts query
    

    现在在 Netlify 的前端看看吧。你应该看到你的帖子立即出现。

    下面是我们在 loving-goodall-44ee08.netlify.app 上的演示。

    img

    What’s the frontend doing

    我们在 Netlify 上运行的前端基本上是使用 micro 作为后台,M3O 为你的帖子服务提供托管 api。我们使用url api.m3o.dev 并将名称空间与 Micro-Namespace 头文件一起传递,但您同样可以使用唯一的 API url,即 $namespace.m3o.dev

    部署的每个服务都解析为一个路径,例如“posts”服务是 api.m3o.dev/posts ,它们的方法在此基础上执行,所以是“posts”。后台的查询是 api.m3o.dev/posts/query。这提供了后台基于 Go 的 gRPC 服务到前端 HTTP api 的自动动态映射。

    下面是我们用来构造调用的 typescript 示例代码:

    export class M3oService {
      public address: string = environment.m3oAddress;
      public namespace: string = environment.m3oNamespace;
    
      constructor(private http: HttpClient) { }
    
      get(service: string, endpoint: string, params: HttpParams): Promise<Object> {
        return this.http.get(this.address + "/" + service + "/" + endpoint, {
          headers: {
            "Micro-Namespace": [this.namespace]
          },
          params: params,
        }).toPromise()
      }
    }
    

    我们在前端列出了这些帖子

      ngOnInit(): void {
        this.m3o.get("posts", "query", null).then(v => {
          this.posts = v["posts"]
        })
      }
    

    Micro is Netlify for the backend

    Signup to M3O right now.

  • 相关阅读:
    asp.net 添加引用类型自动变为GAC
    FPDFCJK.BIN下载(Foxit Reader中/日/韩CJK文字符支持包)
    Failed to access IIS metabase.
    Failed to access IIS metabase.
    判断用户计算机是否安装了sql server
    (Microsoft.Reporting.WebForms.ReportViewer) is not compatible with the type of control (Microsoft.Reporting.WebForms.ReportViewer)
    当你被利用的价值越来越小时,路会越来越窄.
    tomcat 6.0如何配置虚拟目录?tomcat 6.0 不能列目录?
    史上最高科技,Big Data奥运
    基于ping命令的网络故障排查方法
  • 原文地址:https://www.cnblogs.com/irocker/p/14103542.html
Copyright © 2011-2022 走看看