Giter Site home page Giter Site logo

rjsanghamitra / learn-layer5 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from layer5io/learn-layer5

0.0 0.0 0.0 27.22 MB

A sample application for learning how to service mesh and for validating SMI conformance

Home Page: https://layer5.io

License: Apache License 2.0

Go 90.39% Makefile 1.18% Dockerfile 3.44% Mustache 4.98%

learn-layer5's Introduction

Shows a dark layer5 logo in light mode and a white logo in dark mode

GitHub contributors GitHub Docker Pulls Go Report Card GitHub issues by-label Website Twitter Follow Slack CII Best Practices

Learn Layer5 (learn to service mesh)

The Learn Layer5 sample application is to be available for use across all service meshes that Meshery supports and is to used as:

Application Architecture

The Learn Layer5 application includes three services: app-a, app-b, and app-c. Though they are different services, they are defined using the same app (source code in ./service). Each service is listening on port 9091/tcp.

Service

The following are the routes defined by the service app and their functionality.

POST /call

This route makes the service make requests to another service. Metrics are collected for this route. sample usage given below:

# Command
curl --location --request POST 'http://service-a:9091/call' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "http://service-b:9091/call",
"body": "{\r\n\"url\": \"http:\/\/service-c:9091\/echo\",\r\n\"body\": \"\",\r\n\"method\": \"GET\"\r\n}",
"method": "POST",
"headers": {
    "h1":"v1"
}
}'

# No Output
GET /echo HTTP/1.1
Host: service-c:9091
User-Agent: Go-http-client/1.1
Accept-Encoding: gzip
Servicename: Service-B

In the above example, we are making a post request to service-a with the body:

{
  "url": "http://service-b:9091/call",
  "body": "{\r\n\"url\": \"http:\/\/service-c:9091\/echo\",\r\n\"body\": \"\",\r\n\"method\": \"GET\"\r\n}",
  "method": "POST",
  "headers": {
      "h1":"v1"
  }
}

This will make service-a to make a POST request to http://service-b:9091/call with the headers specified above, and the body:

{
  "url": "http://service-c:9091/echo",
  "body":"",
  "method": "GET"
}

This inturn will make service-b to make a GET request to http://service-c:9091/echo.

GET /metrics

Gets the metrics from service-a

# Command
curl --location --request GET 'http://service-b:9091/metrics'
# Output
{
    "ReqReceived": [
        "Service-A"
    ],
    "RespSucceeded": [
        {
            "URL": "http://service-c:9091/echo",
            "Method": "GET",
            "Headers": null
        }
    ],
    "RespFailed": []
}
  • In ReqReceived we see list of requests service-b received and from whom it received. Here we see service-A. Actually each of the service sets a header ServiceName which is read by the service to determine the sender.
  • As service-b made a request to service-c and the request succeeded, we can see the details in the list of successful responses (RespSucceeded).

DELETE /metrics

Clears the counters in service

# Command
curl --location --request DELETE 'http://34.68.35.174:9091/metrics'
# No Output

Note: metrics are collected only for /call and /echo.

Service Mesh Interface (SMI) Conformance

The learn-layer5 application serves as a sample application to validate the conformance of any service mesh with the SMI specifications. To verify SMI conformance, run Meshery and the Meshery adapter for the specific service mesh you wish to test. Invoke the suite of SMI conformance tests on the specific service mesh you would like to validate.

Invoking conformance tests

As a Service Mesh user Meshery allows you to schedule tests and invoke them programmatically. Meshery will store these test results and allow you to retrieve them later.

As a Service Mesh maker Meshery guarantees provenance of these tests and facilitates the public publicing of this suite of tests results into a versioned, public matrix of conformance status (consisting of both supported capabilities and test compliance).



If you’re using Learn Layer5 or if you like the project, please β˜… star this repository to show your support! 🀩

Our projects are community-built and welcome collaboration. πŸ‘ Be sure to see the Layer5 Community Welcome Guide for a tour of resources available to you and jump into our Slack! Contributors are expected to adhere to the CNCF Code of Conduct. Shows an illustrated light mode meshery logo in light color mode and a dark mode meshery logo dark color mode.

Layer5 Service Mesh Community

βœ”οΈ Join any or all of the weekly meetings on the community calendar.
βœ”οΈ Watch community meeting recordings.
βœ”οΈ Access the community drive.
βœ”οΈ Discuss in the Community Forum.

Not sure where to start? Grab an open issue with the help-wanted label.

About Layer5

Layer5's cloud native application and infrastructure management software enables organizations to expect more from their infrastructure. We embrace developer-defined infrastructure. We empower engineer to change how they write applications, support operators in rethinking how they run modern infrastructure and enable product owners to regain full control over their product portfolio.

License

This repository and site are available as open source under the terms of the Apache 2.0 License.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.