Udacity | SUSE: 아키텍처 고려사항 - 랩

This is the fourth article in the series, Udacity: SUSE Cloud Native Foundations. This is an extension of the previous article, .


이 섹션에서는 이전 섹션의 두 가지 연습과 한 가지 edge 사례를 살펴보겠습니다.
  • Exercise 1: Endpoints for Application Status
  • Exercise 2: Application Logging
  • Edge Case: Amorphous Applications
  • 다음 연습에서는 Windows 노트북과 Visual Studio 코드를 사용합니다.파이톤이랑 플라즈크도 설치했어.설치에 대해 이것link을 검사할 수 있습니다.

    연습 1: 응용 프로그램 상태의 끝점


    클론 랩 저장소는 여기link에 있습니다.
    $ git clone https://github.com/udacity/nd064_course_1.git
    
    너는 아래의 폴더를 보아야 한다.
    $ ls -ltr
    drwxr-xr-x 1 Eden Jose 197610    0 Jun 18 19:41 nd064_course_1/ 
    
    exercises/python-helloworld 폴더로 이동합니다.
    $ cd nd064_course_1/
    
    $ ls -l
    total 25
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 19:41 exercises/
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 19:41 project/
    -rw-r--r-- 1 Eden Jose 197610 12 Jun 18 19:41 README.md
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 19:41 solutions/
    
    $ cd exercises/python-helloworld/
    
    $ ls -l
    total 6
    -rw-r--r-- 1 Eden Jose 197610 167 Jun 18 19:41 app.py
    -rw-r--r-- 1 Eden Jose 197610  32 Jun 18 19:41 requirements.txt
    
    찾은 지침here에 따라 우리는 폴더nd064_course_1를 프로젝트 폴더로 사용하고 가상 환경을 만들어flask를 설치할 수 있습니다.가상 환경을 만들려면 다음 명령을 실행합니다.
    $ cd nd064_course_1
    $ python -m venv env
    
    env 에서 새 nd064_course_1 폴더를 볼 수 있을 것입니다.
    $ ls -l
    total 13
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 21:27 env/
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 21:12 exercises/
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 19:41 project/
    -rw-r--r-- 1 Eden Jose 197610 12 Jun 18 19:41 README.md
    drwxr-xr-x 1 Eden Jose 197610  0 Jun 18 19:41 solutions/
    
    Visual Studio 코드에서 편집기nd064_course_1 폴더를 열고 명령 팔레트(보기 > 명령 팔레트 또는 (Ctrl+Shift+P)를 엽니다.그리고 Python:select 해석기 명령을 선택한 다음 프로젝트 폴더에서 ./env 또는 .\env로 시작하는 가상 환경을 선택하십시오.


    가상 환경을 활성화하기 위해 새 터미널을 엽니다.
    가상 환경에 flask를 설치합니다.
    $ python -m pip install flask
    
    설치 후 exercises/ython-helloworld 폴더로 이동하여 다음 명령을 실행합니다.이 명령은 Flask 개발 서버를 실행하고 응용 프로그램을 찾습니다.기본값은 py입니다.
    $ cd exercises/python-helloworld/
    
    $ python -m flask run
    * Environment: production
    WARNING: This is a development server. Do not use it in a production deployment.
    Use a production WSGI server instead.
    * Debug mode: off
    * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    
    이것이 유효한지 확인하려면 브라우저를 열고 127.0.0.1:5000로 이동합니다.

    다음 요구 사항을 고려하여 Python Flask 응용 프로그램을 /status/metrics 엔드포인트로 확장합니다.
  • 두 끝점 모두 HTTP 200 상태 코드
  • 로 돌아가야 합니다.
  • 두 단점은 모두 JSON 응답을 되돌려야 한다. 예를 들어 {"user":"admin"}.
    (참고: JSON 응답은 이 단계에서 하드코딩 가능)
  • /status 엔드포인트는 이 예와 유사한 응답을 반환해야 합니다. 결과: OK-Health
  • /metrics 단점은 본 예와 유사한 응답을 되돌려야 합니다. 데이터: {UserCount:140, UserCountActive:23}
  • 솔루션:
    편집app.py:
    from flask import Flask
    from flask import json
    
    app = Flask(__name__)
    
    @app.route('/status')
    def status():
    response = app.response_class(
            response=json.dumps({"result":"OK - healthy"}),
            status=200,
            mimetype='application/json'
    )
    
    return response
    
    @app.route('/metrics')
    def metrics():
    response = app.response_class(
            response=json.dumps({"status":"success","code":0,"data":{"UserCount":140,"UserCountActive":23}}),
            status=200,
            mimetype='application/json'
    )
    
    return response
    
    @app.route("/")
    def hello():
    return "Hello World!"
    
    if __name__ == "__main__":
    app.run(host='0.0.0.0')
    
    수정된 app.py 을 실행하고 브라우저에서 다시 링크 127.0.0.1:5000 를 열려고 시도합니다.
    $ python -m flask run
    * Environment: production
    WARNING: This is a development server. Do not use it in a production deployment.
    Use a production WSGI server instead.
    * Debug mode: off
    * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

    추가/status/metrics를 통해 종단점이 제대로 작동하는지 확인

    연습 2: 애플리케이션 로그


    이 단계에서 Hello World 프로그램을 확장해서 서로 다른 단점을 처리합니다.일단 종점에 도착하면 이 조작을 표시하는 기록선을 기록해야 한다.
    이 연습에서는 Hello World 응용 프로그램 collect logs를 개발하고 다음 요구 사항을 충족해야 합니다.
  • 로그 행은 타임스탬프와 요청의 끝점을 기록해야 합니다. 예를 들어,
  • "{{TIMESTAMP}}, {{ ENDPOINT_NAME}} endpoint was reached"
    
  • 로그는 app라는 파일에 저장해야 합니다.일지.
  • 디버그 단계에서 Python 로그 수집을 사용합니다.
  • 에 대한 자세한 내용은 logging Python module를 참조하십시오.
  • 솔루션:
    수정app.py.여기서 우리가 사용하는 것은 app.logger 단점에 따라 정보를 기록하는 것이다.로그를 특정 파일에 저장하기 위해서, 우리는 파이톤의 logging module 을 사용합니다.이 로그들은 현재 app.log라는 파일로 유동적으로 전송됩니다.
    
    from flask import Flask
    from flask import json
    import logging
    
    app = Flask(__name__)
    
    @app.route('/status')
    def healthcheck():
        response = app.response_class(
                response=json.dumps({"result":"OK - healthy"}),
                status=200,
                mimetype='application/json'
        )
    
        ## log line
        app.logger.info('Status request successfull')
        return response
    
    @app.route('/metrics')
    def metrics():
        response = app.response_class(
                response=json.dumps({"status":"success","code":0,"data":{"UserCount":140,"UserCountActive":23}}),
                status=200,
                mimetype='application/json'
        )
    
        ## log line
        app.logger.info('Metrics request successfull')
        return response
    
    @app.route("/")
    def hello():
        ## log line
        app.logger.info('Main request successfull')
    
        return "Hello World!"
    
    if __name__ == "__main__":
    
        ## stream logs to app.log file
        logging.basicConfig(filename='app.log',level=logging.DEBUG)
    
        app.run(host='0.0.0.0')
    
    테스트를 위해 우리는 프로그램을 실행합니다.다시 py를 사용하지만, 이번에는 이 간단한 명령을 사용합니다.
    $ python app.py 
     * Serving Flask app 'app' (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on all addresses.
       WARNING: This is a development server. Do not use it in a production deployment.
     * Running on http://192.168.254.105:5000/ (Press CTRL+C to quit)
    
    브라우저로 돌아가서 아래에 주 단점이 있는 링크를 입력한 다음 두 단점이 있는 링크를 입력하십시오

    터미널로 돌아가면 app.log 폴더에 exercises/python-helloworld 가 만들어진 것을 볼 수 있습니다.
    $ ls -l
    total 10
    drwxr-xr-x 1 Eden Jose 197610   0 Jun 18 22:22 __pycache__/
    -rw-r--r-- 1 Eden Jose 197610 685 Jun 18 22:54 app.log
    -rw-r--r-- 1 Eden Jose 197610 998 Jun 18 22:52 app.py
    -rw-r--r-- 1 Eden Jose 197610  32 Jun 18 19:41 requirements.txt
    
    $ cat app.log
    WARNING:werkzeug: * Running on all addresses.
       WARNING: This is a development server. Do not use it in a production deployment.
    INFO:werkzeug: * Running on http://192.168.254.105:5000/ (Press CTRL+C to quit)
    INFO:app:Main request successfull
    INFO:werkzeug:127.0.0.1 - - [18/Jun/2021 22:53:51] "GET / HTTP/1.1" 200 -
    INFO:app:Main request successfull
    INFO:werkzeug:127.0.0.1 - - [18/Jun/2021 22:54:11] "GET / HTTP/1.1" 200 -
    INFO:app:Metrics request successfull
    INFO:werkzeug:192.168.254.105 - - [18/Jun/2021 22:54:21] "GET /metrics HTTP/1.1" 200 -
    INFO:app:Metrics request successfull
    INFO:werkzeug:192.168.254.105 - - [18/Jun/2021 22:54:24] "GET /metrics HTTP/1.1" 200 -
    
    

    테두리 사례: 비결정 응용


    한 엔지니어링 팀이 하나의 제품(monolith와 Micro 서비스 포함)을 성공적으로 발표한 후에 응용 프로그램의 생명 주기의 다음 단계는 유지보수이다.본 예에서 우리는 제품 발표 후 자주 사용하는 유지보수 조작을 탐구할 것이다.

    전체 유지보수 단계에서 응용 프로그램의 구조와 기능에 변화가 발생할 수 있다는 것은 예상한 것이다!응용 프로그램의 체계 구조는 정태적이지 않고 무정형이며 끊임없이 이동 중이다.이것은 제품의 유기적인 성장을 대표하는데 이 제품은 고객의 피드백과 신흥 기술에 호응할 수 있다.
    제품 발표 후 유지보수 단계에서monolith와 마이크로 서비스를 바탕으로 하는 응용 프로그램은 모두 과도할 것이다.새로운 기능을 추가하거나 도구를 통합하는 것을 고려할 때 유연성이 아니라 확장성에 관심을 가져야 한다.

    일반적으로 정의가 양호하고 간단한 기능을 사용하여 여러 서비스(예를 들어 마이크로 서비스)를 관리하는 것이 새로운 서비스(예를 들어 우리가 Monolith에서 본 것)를 지원하는 것보다 더 효과적이다.그러나 구조가 좋은 유지보수 단계를 가지려면 응용 프로그램의 구조를 선택하는 원인과 관련된 균형을 알아야 한다.
    유지 관리 단계에서 가장 일반적인 몇 가지 작업은 다음과 같습니다.
  • 버스트 작업 - 서비스에 너무 많은 기능이 포함되어 있고 관리가 어려운 경우 버스트 작업을 적용합니다.이런 상황에서 더욱 작고 관리하기 쉬운 단원을 사용하는 것이 가장 좋다.
  • 합병 조작 - 단원이 너무 세분화되거나 밀접하게 연결된 조작을 집행하면 합병 조작을 응용하고 이 단원을 합병하는 개발 장점을 제공한다.예를 들어 한 서비스에서 두 개의 단독 로그 출력과 로그 형식 서비스를 통합합니다.
  • 교체 작업 - 서비스의 보다 효율적인 구현을 결정할 때 사용합니다.예를 들어 Go에서 Java 서비스를 다시 작성하여 전체 실행 시간을 최적화합니다.
  • 오래된 작업 - 더 이상 비즈니스 가치를 제공하지 않는 서비스를 위해 아카이빙하거나 폐기해야 합니다.예를 들어 일회성 이전 과정을 수행하는 서비스입니다.
  • 이러한 작업을 수행하면 프로젝트의 수명과 연속성이 연장됩니다.전반적으로 최종 목표는 응용 프로그램이 고객에게 가치를 제공하고 엔지니어링 팀의 관리가 쉽다는 것을 확보하는 것이다.그러나 더 중요한 것은 프로젝트의 구조가 정태적이지 않다는 것을 관찰할 수 있다.그것은 무정형적이며 새로운 수요와 고객 피드백에 따라 끊임없이 발전한다.
    와, 그건 장편대론이야!걱정하지 마십시오. 다음 절에서는 Kubernetes의 용기를 사용해서 배열하는 것을 중점적으로 토론할 것입니다.
    안녕히 계세요!😁

    If you enjoy this write-up and would like to learn more, make sure to hit the Follow just below and bookmark the series. I'll also be glad to connect with you on .
    See you there!
    😃



    .ltag__user__id__350730.작업 따르기 버튼
    배경색: #7eb4fb!중요
    색상: #fcef98!중요
    테두리 색상: #7eb4fb!중요
    }

    이든 호세 포레


    A cloud enthusiast, an IT Professional, and a problem-solver. I am either learning something new, running a mile, or planning my next 100 days.

    좋은 웹페이지 즐겨찾기