우리는 느린 조회로 자신의 사이트를 파괴했다

App Land에서 우리는 AppMap for VSCode이라는 무료 소스 오픈 도구를 제작하여 코드 디자인과 행위를 더욱 잘 이해하고 개발자가 고품질의 코드를 납품하도록 돕는다.그러나 코드 디자인이 우리 회사의 사명이라고 해도 우리는 여전히 다른 사람들과 같은 실수를 범할 것이다!
일련의 게시물에서, 나는 우리가 지난 3개월 동안 저지른 다섯 개의 코드 설계 오류를 공유할 것이다.모든 게시물에서, 나는 너에게 무슨 일이 일어났는지 확실히 알 수 있도록 충분한 세부 사항을 제공할 것이다.나는 또한 우리가 이 문제를 어떻게 발견했는지, 우리가 그것을 어떻게 복원했는지, 그리고 우리가 어떻게 개발과 코드 심사 과정을 개선함으로써 대응했는지 토론할 것이다.나의 목표는 당신에게 정보와 건의를 제공하는 것입니다. 당신은 이런 정보와 건의를 사용하여 같은 실수를 피할 수 있습니다!
첫 번째 예에 들어가기 전에 코드 디자인 오류의 본질을 살펴보자.우선, 우리는 이러한 문제들을 성능, 안정성(bug), 안전성과 유지보수성 등 네 가지로 나누는 것이 매우 도움이 된다는 것을 발견했다.
  • 보안 취약점은 공격자가 서비스를 중단하고 귀하의 명예에 손해를 끼칠 수 있도록 합니다.보안 문제는 사용자에게 직접적 또는 간접적인 손해를 입힐 수도 있다. 예를 들어 계정에서 그들을 잠그거나 데이터를 훔치는 것이다.
  • 의 성능 문제는 사용자 체험을 떨어뜨리고 응용 프로그램을 사용할 수 없게 할 수도 있다.
  • 의 유지보수 문제는 일반적으로 응용 프로그램에 직접적인 영향을 주지 않는다. 코드가 유지보수가 불가능해지면 품질의 모든 다른 측면에서 영향을 받는다.유지보수가 불가능한 프로그램도 사용하기 어렵고 비용도 비싸다.고급 개발자들은 유지보수성을 매우 걱정한다. 왜냐하면 그들이 유지보수성을 낮추면 응용 프로그램이 모든 다른 방면에서도 떨어지고 팀의 사기도 영향을 받는다는 것을 알고 있기 때문이다.
  • 의 신뢰성 문제도 사용자 체험에 영향을 주고 응용 프로그램을 사용할 수 없게 할 수 있다.
  • 지난 10년 동안 정적 분석 도구는 이 네 분야의 일부 문제를 자동으로 측정할 수 있었다.그러나 Top 25 Most Dangerous Software Weaknesses의 MITRE 목록에는 다음 목록에서 가장 중요한 네 가지 약점에 대한 설명이 포함되어 있습니다.
    All four of these weaknesses represent some of
    the most difficult areas to analyze a system on.
    
    이 목록을 자세히 살펴보면 그들이 말한'분석하기 어렵다'는 것은'정적 분석을 찾을 수 없다'는 것을 가리킨다.개발자가 코드의 질을 유지하기 위해 정적 분석기에 의존할 수 없다는 뜻이다.우리가 복잡한 문제를 찾아내고 해결하는 가장 좋은 도구는 코드 심사이다. 이것이 바로 우리가 모든 예시에 제공한 건의에서 더욱 좋은 코드 심사 실천이 현저한 위치를 차지하는 이유이다.
    이 점을 기억하고 우리의 첫 번째 실수를 시작합시다.

    1. 우리는 느린 조회(성능)로 자신의 사이트를 파괴했다


    이 잘못은 그것을 생산에 투입시켰기 때문에, 우리는 어쩔 수 없이 후퇴하여 그것을 복원해야 한다
    느린 조회가 진정한 문제일 수도 있다.사용자 체험을 떨어뜨릴 뿐만 아니라, 웹 사이트의 성능이 충분하지 않으면 웹 서버와 인터페이스가 시간을 초과하여 (보통 30초 후) 응용 프로그램은 완전히 사용할 수 없을 것이다.AppLand Server 제품에는 약 100만 개의 AppMaps, 총 1TB의 데이터가 포함되어 있습니다.이것은 FAANG 규모는 아니지만, 여전히 충분하고, 효율이 낮은 조회는 문제를 초래할 수 있다.이게 우리한테 일어난 일인데..
    맑은 날, 업데이트가 끝난 후, 우리는 프로그램의 홈페이지가 항상 시간을 초과하는 것을 발견했다.MiniProfiler을 사용하면 느린 검색이 문제를 일으킨 것을 알 수 있습니다.그리고 우리는 PostgreSQL EXPLAIN의 특성을 이용하여 조회를 분석한다.
    다음은 조회 계획에 대한 링크입니다. 무슨 일이 일어났는지 정확히 알고 싶으면.
    Slow query, cost = 175,000

    구제책


    모든 팀은 조회 계획을 읽고 조회를 최적화할 수 있는 사람이 필요하다. 우리는 확실히 이런 사람이 있다.일단 우리가 조회 계획이 생기면, 우리의 데이터베이스 전문가들은 문제의 근원이 인덱스되지 않은 연결이라는 것을 확정할 수 있다.영어로 말하자면, 우리의 조회는 두 표의 데이터를 한데 연결시킨다.처음에 우리의 데이터베이스가 매우 어렸을 때 조회 속도가 매우 빨라서 아무도 그 효율이 낮다는 것을 알아차리지 못했다. (작은 데이터 집합에서 효율이 낮은 조작은 어쨌든 매우 빠르다.)테이블이 점점 커지면서 조회도 점점 느려진다. 왜냐하면 우리는 데이터베이스에 색인을 제공하지 않았기 때문에, 이것은 효과적으로 줄을 매칭할 수 있기 때문이다.색인을 추가하는 것은 기본적으로 즉각적인 복구이다.솔직히 101 데이터베이스다.그러나 새로운 응용 프로그램을 개발할 때 이런 것들은 틈새에서 쉽게 빠져나간다.

    프리벤션


    아마도 당신은 PostgreSQL 조회 계획 전문가가 아닐 것입니다.나도 아니야.그러나 성능이 저하되는 문제를 방지하기 위해서는 쿼리 계획의 두 가지 사항만 알아야 합니다.
  • 은 생산 데이터의 조회 계획이 중요하다.dev나stage 데이터베이스에서 신속하고 효율적인 조회 계획을 보는 것은 아무것도 의미하지 않습니다.
  • 의 원가 숫자는 주의해야 한다.하면, 만약, 만약...조회를 보내지 마세요!SQL을 최적화하는 데 도움을 줄 전문가를 찾습니다.
  • 이 경험을 한 후에, 우리는 복잡한 조회가 우리의 코드 라이브러리에 들어갈 수 있도록 더욱 조심스럽게 허락할 것이며, 상세한 검사를 할 필요가 없을 것이다.다행히도, 우리는 모든 코드의 AppMaps를 가지고 있으며, AppMaps는 모든 SQL 조회를 상세하게 보여 줍니다.따라서 각 PR에 어떤 SQL이 도입되었는지 정확히 알고 있으며, 각 신규 또는 수정된 질의를 병합하기 전에 질의 계획을 검토할 수 있습니다.SQL 변경 사항을 쉽게 식별하고 보기 위해 AppMaps 행동을 구분하는 기능을 추가했습니다. (예, 원본이 될 것입니다.)이 새 기능은 SQL 포함 중요 코드 경로에 대한 변경 사항을 보고하고 강조 표시합니다.
    다음은 제안된 코드 변경에서 SQL DELETE 문이 삭제된 AppMap Trace Diff의 예입니다.

    우리의 코드 심사에서, 우리는 조회에 대한 어떤 대가가 높은 변경도 강조했다.그리고 가능하다면, 우리는 배치하기 전에 생산 데이터베이스에 있는 조회 계획을 검사하여, 그것들이 효력이 발생하기 전에 어떠한 의외의 상황도 포착할 수 있도록 한다.응용 프로그램과 데이터베이스에 더 좋은 모니터링 기능을 추가했습니다.마찬가지로 이것은 매우 기본적인 것이지만 창업팀은 매우 바쁘다.때때로 (많은 경우...) 더 중요한 것은 사용자의 수요를 충족시키기 위해 제품을 개선하는 것이지, 어느 날 발생할 수 있는 문제를 방지하는 것이 아니다.이 조회 속도가 느린 문제는 SQL을 감시하고 처리하는 데 있어서 우리의 수준을 향상시킬 때가 되었다는 것을 일깨워 준다.
    읽어주셔서 감사합니다!이 시리즈의 다음 네 편의 문장을 계속 갱신하다.
    AppMap for VSCode은 더 나은 Python, Ruby, Java 코드를 작성할 수 있도록 상호작용 맵과 체계 구조 분석을 제공합니다.2인치/₂ 차트를 설치, 구성 및 생성하는 분 수입니다.VS 코드 시장 보기!
    AppMap과 코드 아키텍처의 차이점에 대한 자세한 내용은 our demo at the New York Enterprise Tech Meetup을 참조하십시오.

    좋은 웹페이지 즐겨찾기