Ruby Unbundled 시리즈: 속도를 줄여 발표 속도를 높입니다.
오늘날의 환경에서 특징 속도는 절대적으로 관건이지만 품질도 마찬가지다.고객의 최초의 불량한 경험은 그들이 다시 돌아오지 못하게 할 수도 있다.첫인상이 바뀌기 어려우니 사후에 문제를 해결하기에는 이미 늦었을 것이다.그럼 우리 어떡하지?너는 더 많은 시간을 들여 테스트를 진행할 수 있지만, 실험실에서의 수익률은 점점 낮아질 것이다. 실제 조작 조건은 대체할 수 없다.새로운 기능에 대한 고객의 반응도 사전에 알 수 없다.다행히도, 많은 기술들이 당신을 더욱 자신 있게 세계에 새로운 기능을 발표할 수 있게 한다.
속도를 높이기 위해서는 속도를 늦춰야 한다는 속담이 있다.이것은 소프트웨어 개발에서 정확하다. 왜냐하면 우리는 사용자가 새로운 기능을 수신하는 속도를 제어하기를 희망하기 때문이다.만약 모든 사람이 동시에 새로운 버전을 얻고 문제가 발생한다면, 당신은 이미 모든 고객에게 영향을 주었을 것입니다.이것은 모든 사람에게 나쁜 하루이다.반대로, 당신은 이 기능을 천천히 출시하여 발생하는 모든 문제를 해결하기를 희망합니다.
만약 문제가 확실히 존재한다면, 빠른 스크롤이 매우 중요하다.비록 일부 고객만 새로운 버전에서 문제가 발생하더라도, 당신은 가능한 한 빨리 이러한 영향을 최소화하기를 희망합니다.이러한 발표 전략은 전형적인 소프트웨어 배치보다 빠른 '스크롤' 메커니즘을 제공했다.
일반적으로, 당신은 먼저 새로운 버전과 기능을 천천히 발표한 다음에, 새로운 소프트웨어에 대한 자신감이 강화됨에 따라 발표 속도를 가속화하기를 희망한다.천천히 앞으로 굴러가지만 항상 빠르게 뒤로 굴러간다.비교적 느린 볼륨 쇼를 사용하면 전체적인 기능 속도와 고객 만족도를 높일 수 있습니다.
배포를 통한 출시율 제어
한 가지 방법은 차량에서 서버가 새로운 버전을 수신하는 속도를 제어하는 것이다.고객 트래픽을 모든 시스템 간에 로드 밸런싱을 허용할 수 있지만 일부 호스트만 새로운 기능을 갖게 됩니다.이 프로세스는 일반적으로 단일 호스트에서 업데이트를 받기 시작합니다.호스트 이름은 OneBox입니다.너는 이 호스트를 자세히 감시하고 문제가 있으면 경찰에 신고해라.만약 순조롭게 진행된다면, 너는 함대의 다른 부분에 계속 단계적으로 배치할 수 있다.
이런 방법은 Blue/Green deployments와 상반된다.이 방법에서 두 번째 호스트의 비용이 있습니다. 파란색이나 녹색 호스트로 바꿀 수 있습니다.예비 부대에 대한 배치를 마친 후에 유량을 새 호스트로 연결할 것입니다.이런 전략은 인프라 시설의 비용을 가져올 수 있는데, 그 장점은 매우 빠른 앞구르기와 뒤구르기 시간을 가진다는 것이다.그러나 기본 개념은 전유 또는 전무의 방법이다.일단 네가 새로운 팀으로 전환된다면, 어떤 잠재적인 영향도 광범위할 것이다.너는 매우 빨리 전진하지만, 이것은 우리의 목표가 아니라는 것을 명심해라.우리는 처음에 느리고 질서정연한 발걸음으로 앞으로 밀고 나가기를 희망했다.
기능문을 사용하여 권전율을 제어하다
또 다른 이념은 새 소프트웨어를 기기의 호스트에 설치하지만 로고나 기능문으로 어떤 사용자가 새로운 기능을 얻는지 제어하는 것이다.이것은 사용자를 여러 용기로 나누는 것과 관련이 있으며, 일반적으로 고객 식별자나 속성을 바탕으로 하는 산열 값이다.이런 기술을 사용하면, 예를 들어 5% 의 사용자만 있는 당신의 기능을 먼저 발표할 수 있다.만약 순조롭게 진행된다면, 이를 10%, 30% 로 늘려, 이와 같이 유추하여 100% 발표될 때까지 한다.100%일 경우 일반적으로 기능을 사용할 수 있습니다.
이 기술은 당신이 존재할 수 있는 어떠한 결함의 폭발 반경이나 영향을 최소화할 수 있도록 한다.새로운 기능이 문제를 일으킨다면 가능한 한 빨리 원인을 찾아내고 최소한의 고객 수에 영향을 주기를 바랍니다.
그것은 확실히 코드의 복잡성을 증가시키는 대가이다.여러 경로가 일정 시간 유지되어야 합니다.특성이 활성화되면, 혼란을 줄이고 나중에 처리하는 데 걸리는 시간을 줄이기 위해 낡은 코드 경로를 정리하기를 원합니다.
그럼에도 불구하고 기능문은 매우 효과적인 방법으로 안전 기능의 출시를 관리할 수 있다.데이터베이스 마이그레이션과 소프트웨어 배포 시간을 관리해야 하는 경우에도 유용합니다.만약 이 두 버전을 지원하는 데이터베이스 모델을 만드는 것이 어렵거나 불가능하다면, 이 기술을 사용하여 전환의 시간을 정확하게 제어할 수 있다.
이상적인 상황에서 첫 번째로 문 제어 기능을 받은 생산 사용자는 canary 계좌이다.현재 이 참새 사용자는 팀에서 만들고 자동화 테스트에 사용됩니다.따라서 이러한 기능은 생산에서 사용되지만 귀하의 계좌에만 영향을 미칠 뿐입니다.이것은 환경에 특정한 많은 문제를 포착할 수 있다. 그렇지 않으면 이런 문제들은 임시 환경이나 시스템 테스트에 나타나지 않을 것이다.단, 테스트 범위는 이 계정의 수동 테스트나 테스트 스크립트에 포함된 용례로 제한됩니다.실제 사용자는 종종 당신이 예상치 못한 일을 할 수 있지만, 이러한 기교는 고객에게 문제가 존재한다는 것을 알기 전에 매우 귀중한 것이다.
후퇴를 영원히 두려워하지 마라
지금까지 우리는 이미 우리의 전진 속도에 대해 토론했다.다른 한편, 관건은 당신이 매우 빠른 방식으로 안전하게 굴러갈 수 있다는 것이다.소프트웨어 발표를 앞두고 있지만 롤백 과정이 무엇인지 모르면 발표의 계획 단계로 돌아가서 중지하십시오.
가장 간단한 스크롤 형식은 다른 배치를 실행하고 이번에는 코드의 원시 버전으로 돌아가는 것이다.그러나 다른 옵션에 비해 상당히 느리다.우리가 토론한 일부 기술 사용 루트는 소프트웨어 처리가 지정한 요청의 단점과 부수적인 버전을 신속하게 바꾸는 데 있다.특성 표지는 또한 빠른 스크롤 메커니즘을 제공했다. 표지가 되돌아오기 때문에 코드가 사용하는 경로는 바로 새로운 것에서 낡은 것으로 바뀐다.
너는 항상 너의 퇴각 메커니즘에 대해 편안함을 느껴야 한다.어떤 버전이 문제를 일으킬 수 있는지에 대해 의문이 있거나, 도량에서 문제가 있는 데이터를 보았을 때, 계속 스크롤해야 합니다.석방을 미루는 것이 반드시 나쁜 일은 아니다.실패감을 가져서는 안 된다. 왜냐하면 너는 항상 이전에 굴러다니며 일을 개선할 수 있는 것들을 배웠기 때문이다.현재 로그와 지표에 데이터가 있습니다. 이 데이터를 분석하여 새 코드가 생산 중인 효과를 볼 수 있습니다.분석은 생각보다 시간이 오래 걸릴 수 있기 때문에 이 작업이 끝날 때 고객에게 어떠한 지속적인 영향을 미치기를 원하지 않는다.따라서 궁금한 점이 있으면 롤백하십시오.앞구르기와 뒷구르기 버전의 자동화 솔루션을 갖추는 것은 매우 중요하다. 이렇게 하면 당신은 이 일을 쉽고 신속하며 자신 있게 완성할 수 있다.
데이터베이스 변경 사항을 잊지 마십시오.
데이터베이스 변경은 일반적으로 볼륨 전시회에서 가장 복잡한 부분이 된다.가능한 범위 내에서 데이터베이스 모델을 끊임없이 변경하고 싶을 뿐입니다.이것은 테이블만 추가하거나 열을 추가하거나 기존 열의 제한을 줄이는 것을 의미합니다.물론, 최종적으로 몇 개의 시계가 아무것도 하지 않을 수도 있지만, 이 제약을 따라 쉽게 앞뒤로 굴러갈 수 있습니다.
데이터베이스 모드 변경을 위해 방어 코드를 작성합니다.기능이 켜지기 전에 모든 새 열의 데이터를 메울 수 없다고 가정하십시오.누락된 값을 기본값과 동일하게 처리하도록 코드를 작성합니다.이와 같은 사소한 일은 패턴 변경, 메우기와 소프트웨어 배치 사이의 배치 과정에서 어떠한 작은 시간 문제도 피하는 데 도움이 될 것이다.
Rails 어플리케이션에서 특성 게이트 구현
기능 게이트 메커니즘은 두 가지 주요 기능을 필요로 한다.
Ruby gemsrolloutand와 rollout-ui는 Rails 애플리케이션에 이러한 기능을 제공합니다.먼저 GEM 파일과 mock_redis에 추가합니다.볼륨 표시줄은 Redis 스토리지 요소 플래그 값을 사용하여 런타임 시 빠르게 액세스할 수 있습니다.이 점은 매우 중요하다. 모든 관련 요청은 이 값을 인용해야 하고, 간단한 캐시가 필요할 때 빠르게 굴러가는 수요를 충족시키기에는 부족하기 때문이다.Mock redis는 비생산 환경에서 쉽게 개발하고 테스트할 수 있습니다.
gem 'rollout'
gem 'rollout-ui'
group :development, :test do
gem 'mock_redis'
end
routes 파일에 마운트만 포함하면 볼륨 표시줄의 사용자 인터페이스를 추가할 수 있습니다. mount Rollout::UI::Web.new => '/admin/rollout'
응용 프로그램에 볼륨 표시줄을 설정합니다.rb 파일.unless Rails.env.production?
$redis = MockRedis.new
else
$redis = Redis.new
end
$rollout = Rollout.new($redis, logging: { history_length: 100, global: true })
Rollout::UI.configure do
instance { $rollout }
end
응용 프로그램에서 볼륨 확장 막대 사용
이제 특성 표지를 만들어서 코드에 사용할 수 있습니다.나는 실시간 여론조사 프로그램을 강화하는 기능을 추가할 것이다. 이 기능은 사용자들이 가장 유행하는 답이 무엇인지 추측할 수 있도록 해 줄 것이다.이것은 그들이 민조 문제에 대한 대답과 다를 수 있다.우리는 또한 그들에게 이렇게 함으로써 보상 포인트를 얻을 기회를 줄 것이다.
/admin/rollout을 찾아서 이름 기능을 만듭니다.여기서 우리는'보상'이라는 기능을 만들었다.
다음에 추가 사용자 추측과 관련 보상점을 포착하기 위해 보상 모델 종류를 추가합니다.Poll Controller에서는 볼륨 확장 막대를 사용하여 현재 사용자의 기능 게이트를 확인합니다.활발했어방법이 기능이 활성화되어 있으면, 보상 대상을 실례화하고 보기 구성 요소가 조정할 범위 내에 두십시오.
그리고 보기 구성 요소에서 추가 보상 문제를 표시합니다.
이게 다야!일단 특성이 완전히 출시되거나 보편적으로 사용될 경우, 특성문 코드를 제거하고 새로운 경로만 남길 수 있다.다음은 이 기능을 활성화한 사용자의 결과입니다.
도움이 되었으면 좋겠습니다. 저희는 당신이 구축한 새로운 기능을 기대하고 있습니다!
Software Development , Developers , ruby on rails web development
Reference
이 문제에 관하여(Ruby Unbundled 시리즈: 속도를 줄여 발표 속도를 높입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devgraph/the-ruby-unbundled-series-release-features-faster-by-slowing-down-3o6n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)