[AZ-305] Build great solutions with the Microsoft Azure Well-Architected Framework

Introduction to the Microsoft Azure Well-Architected Framework

- Azure Well-Architected Framework pillars

Key

  • Cost optimization มันมีแนวคิด FinOps ช่วยลด
    - วางแผนก่อนขึ้น เอาเครื่องมือมาคิด Cost
    - เลือกใช้ IAAS (แพง) > PAAS / SAAS (ส่วนใหญ่ถูกกว่า)
    - Observability ต้องรู้ก่อนอะไรแพง แล้วถึงจะ Focus ได้
    - รูปแบบการจ่ายมีผลนะ Pay As You Go แพงสุด ถ้ารูป Workload ประจำแล้ว ไปจ่ายแบบรายเดือน รายปี (Reserve) และถ้ารูปว่าช่วงไหน Peak ไปซื้อ Spot ไว้
  • Operational excellence
    - reducer variance and error ลงมือไม่เหมือนกัน / DevOps
    - automation - infra as a code
    - Observability
  • Performance efficiency - หา Spike และควบคุมมัน
    - bottlenecks in your application - ตัว Code
    - storage performance - caching / ลด latency region หรือ cdn ใกล้ๆ
    - network performance - คุยใน หรือ คุยนอก นอกจากนี้การเพิ่ม messaging layer - buffer ไม่ให้ Client ค้างรอ
    - เร่งด่วน เสียเงิน Scale up (เพิ่ม Spec) scale out (เพิ่ม Machine)
  • Reliability
    - เข้าใจ Recovery point objective (RPO): The maximum duration of acceptable data loss
    - และ Recovery time objective (RTO): The maximum duration of acceptable downtime
    จากนั้นหาตัวช่วยที่จะมาลด และหาจุด single point of failure
  • Security - มันมีหลายส่วนเลย App / Credential Expose / Malware / Network / Phishing เป็นต้น
    มีแนวคิดทั้ง
    Defense in Depth
    - Data - encryption 
    - Applications - SQL injection and cross-site scripting (XSS) / OWASP
    - VM/compute - AntiVirus EDR
    - Networking - Firewall SSH or RDP
    - Perimeter กัน DDoS attacks
    - Policies and access - Authentication กันหลุด เช่น พวก OpenID Connect, OAuth, or Kerberos-based authentication such as Active Directory
    - Physical security
    Zero Trust
    อ๋อ แล้วอย่างลืมพวก มาตรฐาน Data | PDPA, GDPR, HIPAA

General design principles

  • Enable architectural evolution - ทุกอย่างไม่จำเป็นต้องอยู่แบบเดิมเสมอไปนะ
  • Use data to make decisions - Observability
  • Educate and enable - เข้าใจของใหม่ และทุกคนนะ จะได้ไม่ต่อต้าน
  • Automate - consistency/reduct time cost

สุดท้ายเข้าใจ Shared responsibility IAAS / PAAS / SAAS

Design มัน คือ การ tradeoffs

Knowledge Check

Microsoft Azure Well-Architected Framework - Cost Optimization

  • Build a team culture that has an awareness of budget, expenses, reporting, and cost-tracking
    ทำ cost model ทำได้จาก ได้ค่าแบบหยาบๆ มาก่อนขึ้นจริง
    Estimate realistic budgets มาจากไหน ค่าหยาบๆ + ปัจจัยอื่น เช่น non-negotiable functional and nonfunctional requirements, trainning เป็นต้น อ๋อ และพวก Growth ด้วยนะ เช่น คาดการณ์ว่า 5 ปี เชื่่อมั่นว่า user จะเพิ่ม ต้องบวก เข้าไปด้วยนะ
    Encourage upstream communication คุยกันทุกฝ่าย จะได้ปรับได้

A budget is the ultimate financial boundary that drives design and implementation decisions.

  • Spend only on what you need to achieve the highest ROI
    ✅ Measure the workload design's total cost
    - consider the ROI as part of the selection process.
    - ถ้า APP อาจจะลด Technical Debt ใน Code
    - ลองย้ายไปใช้ PAAS เลือกหลายตัว เช่น App > VM หรือ AKS หรือ AppService ตั้งเงื่อนไข + ROI
    ✅ Refine the design ปรับ Flow ตาม Service ที่มี เช่น
    - เดิม VM + IIS มาเป็น Azure App Service
    - เดิม มี VM CI/CD มาเป็น GitHub Action และค่อยสร้าง Runner
    ✅ Design your architecture to support cost guardrails - cost guardrails ดูให้ไม่เกิดที่กำหนด มีหลายท่า
    - สอนให้คนใช้ Microsoft Cost Management
    - App Service Scale Limit
    - Azure Policy
    - Storage Tier - to Automation อะไรไม่ใช้ย้าย Tier ลด Cost
  • Design for usage optimization
    ✅ Use consumption-based pricing when it's practical เอาตามที่ใช้จริง เช่น พวก Serverless / Azure Function ดีกว่าไปพวก flat-rate billing จองยาวๆ แบบพวก VM
    ✅ Optimize your high-availability design ขึ้นกับ Requirement
    - active-active - ทำต่อเมื่อแบบ มี requirement region fail
    - active-only - ดีสุดจ่ายที่น้อย ถ้าตกลงได้ เช่น ยอมเอา Backup ขึ้นแทน รอได้ ตกลง RPO RTO กัน
    - active-passive - ไม่ควรทำนะ มันจะจ่ายเงิน passive ด้วย
    Keep your cloud environment clean of unused resources and data 5ส
    - อะไรที่ไม่ใช่ไปดูจาก Azure Advisor cost recommendations

Maximize the use of resources and operations. Apply them to the negotiated functional and nonfunctional requirements of the solution.

  • Design for rate optimization - Increase efficiency without redesigning, renegotiating, or sacrificing functional or nonfunctional requirements.
    ✅ ถ้ารู้ load แน่นอน ไม่มีกระตุก ไป flat-rate billing จองยาวๆ
    ✅ Consolidate infrastructure where practical - อะไรที่ใช้ร่วมกันได้ เช่น AKS ไม่ต้องไปแยก Cluster ตัวเองทุกระบบ
    ✅ Take advantage of reservations and other infrastructure discounts
    - reservations จ่ายจองยาวๆ 1 ปี 3 ปี
    - Azure Hybrid Benefit ถ้ามี License เอาจากของเดิมมาใช้
    - ถ้ามี load แปลก ไปจองเพิ่มจาก Spot
  • Monitor and optimize over time
    ✅ Continuously evaluate and optimize your environment and support costs. ดู Cost และตกลง Trade Off ปรับตาม
    ✅ Continuously review and refine your workload base on ROI

Using the Developer SKU for the Dev/Test environment's เช่น API Management instance cost-effective option

The functional and nonfunctional requirements aren't subject to change based on ROI data

Knowledge Check

Microsoft Azure Well-Architected Framework - Operational excellence

  • Embrace DevOps culture
    ✅ Using a common toolset can make it easier to share knowledge and collaborate by reducing the number of communication and collaboration methods
    ✅ Embrace continuous improvement
    - Blameless postmortems - หาสาเหตุ และปรับปรุง โดยไม่โทษใคร
    - knowledge sharing wiki
    - import A/B Testing
    ✅ Codify development and operations procedure
    - development เช่น Code Review / Coding Standard / รวมถึง Flow การทำงานด้วยนะ
    - single source of truth จะได้หาจากแหล่งเดียวกัน

Standards add predictability to operations and make processes and practices scalable. Validating standards is a great way to draw points of improvement.

Be prepared for emergency and recovery situations by conducting regular drills.

  • Establish development standards - Optimize productivity by standardizing development practices, enforcing quality gates, and tracking progress and success through systematic change management.
    ✅ Adopt industry standards for development - Agile Scrum / ISO / CMMI
    ✅ Shift left for testing - Testing early / automate / DevOps Quality Gates
    ✅ Measure development efficiency - ดู Incident / Bug บราๆ โดยใน Azure ก็มี  
    - velocity most effective in improving their quality and efficiency?
    - Azure DevOps Boards มีภาพรวมสรุปใน Repo
  • Evolve operations with observability - Gain visibility into the system, derive insight, and make data-driven decisions
    ✅ Observe your workload through telemetry
    - OpenTelemetry Lib ได้ทั้ง Log / Trace / Metric มันจะเห็นว่าอะไรที่ช้า App / DB
    ✅ Visualize monitoring data in dashboards
    -  Dashboards should be designed to provide the right information to the right people.
    - This means that each team should have their own dashboard that provides the information they need to do their job.
    ✅ Design a robust alerting strategy
    - Make alerts actionable
    - Alert notifying the accountable roles ไม่ส่งไปทั่ว และมี Pattern ที่ชัดเจน (severity levels/description)
    - Tools: Azure Monitor
  • Deploy with confidence - IaC
    ✅Use Infrastructure as Code (IaC)
    ✅ Treat your IaC the same as your application code
    - ระวังเรือง Code secret management, access control พวก Supply Chain Attack เป็นต้น
    - moving the IaC code to the same repository as the application code, team cut down the risk of security or governance issues by applying the same standards across both codebases.
    ✅ Standardize deployments on a single manifest
    - จะได้เอาไปทำใหม่สะดวก หรือขึ้น DR Site จริงๆ ส่วนตัวเคสมีเคสโดน Ransomware เอาพวก Docker Compose / K8S ขึ้นมาง่ายไว
    - หรือ อาจจะใช้ Region อื่นตรงนี้ต้องเตรียม Replicte Data ไป และเอาพวก IaC ไปใช้
  • Automate for efficiency -  Replace repetitive manual tasks with software automation
    ✅ Automate flows
    - อะไรที่ควร automate จับจาก complexity, effort, frequency, accuracy, timeliness, and lifespan.
    ✅ Design for automation - เช่น UI Test เราต้องทำให้ Component มี Unique Id ตัว Tools จะได้จับง่ายๆ
    ✅ Automation should be well-architected
    - Automation is integral to the workload, and should be maintained with the same standards as the rest of the workload components.
    - จริงๆควรเอาไปอยู่กับ Code นะ
  • Adopt safe deployment practices - Implement guardrails in the deployment process to minimize the effect of errors or unexpected conditions.
    ✅ Codify automated deployment standards
    - All deployments should be automated through pipelines. This ensures that deployments are consistent and repeatable
    ✅ Deploy often
    - Small, frequent deployments are less risky and easier to roll back
    ✅ Use a progressive exposure approach
    - Feature Flags ลองกับกลุ่มเล็กๆก่อน ถ้าใช้ทั่วไปอาจจะต้องทำ FAQ
    - Green Blue / AB Testing

Knowledge Check

Microsoft Azure Well-Architected Framework - Performance efficiency

  • Negotiate realistic performance targets
    ✅ Prepare to negotiate performance targets
    - Understanding your platform's capabilities ก่อน
    - ระบบใหม่ insight เช่น input from market analysis/ experts/ industry standards.
    - ระบบเก่า usage patterns and bottlenecks จากข้อมูลในอดีต
    ✅ Negotiate performance targets effectively
    - business owners understand user promises ไม่เรื่องของ IT
    - performance vs pricing
    - ทิศทางธุรกิจด้วยจะ แบบปีแรกจะทำ SEA แต่อีก 5 ปีขยายไป USA / EUROPE แสดงว่า Design ปี1-5 SEA แต่ปี 4-5 เตรียม Scale Design เป็นต้น
    ✅ Design with a flow-centric focus
    - Identify the workload flows and prioritize the flows in the architectural diagram > By breaking down Flow นึกถึง C4 Diagram
    - จะได้ Focus และทุ่ม Resource Budget ได้
  • Design to meet capacity requirements - Provide enough supply to address anticipated demand.
    ✅ Design the workload effectively
    - right resources across the technology stack
    - right-sizing plan
    ✅ Properly forecast capacity needs
    - forecast anticipated changes in capacity that can occur เผื่ออนาคต Scale with Limit
    - Consider features that can fulfill the scalability requirements of your workload.
    ✅ Proof of concept deployment - ตรวจสอบข้อสงสัย อย่าง เช่น ในตัวอย่างจะเป็น Latency
  • Achieve and sustain performance - Protect against performance degradation
    ✅ Test for performance in development - Formalize performance tests as quality gates
    ✅ Optimize through observability
    - ลองทำ Synthetic Transactions (Transactions ปลอม มาเทส)
    + real transaction
    ✅ Handle workload changes intelligently - Tune App ตาม Grow
  • Improve efficiency through optimization - Improve system efficiency + Increase Value
    ✅ Prioritize performance optimizations
    ✅ Look for design improvements - ปรับ Code หรือ เทคนิคใหม่
    ✅ Analyze telemetry and trends - application performance monitoring (APM) tools and profilers for this purpose มาดูเช่น performance trends / identify execution bottlenecks

Knowledge Check

Microsoft Azure Well-Architected Framework - Reliability

  • Design for business requirements
    ✅ Identify reliability targets
    - ระบบมันมีหลาย Flow นะ แล้วอะไรสำคัญที่สุด และรองลงมา เช่น ระบบ Insurance มองว่าส่วนขอ Claim + Approve สำคัญ
    - reliability > security monitoring ไม่ได้อยู่ในส่วนนี้นะ
    ✅ Understand platform commitments พวก SLA / RTO / RPO
    - The Microsoft SLAs for Online Services documentation.
    ✅ Determine dependencies and their effect on resiliency
    - documented all dependencies ว่าระบบมีส่วนประกอบอะไร เราจะได้รู้ว่า อันไหนที่สำคัญ และเลือก Solution ที่เหมาะสม แต่ละอัน รวมถึงถ้าพังแล้วจะเกิดอะไรขึ้น
    - นับ Internal + External Compunent
  • Design for resilience
    ✅ Determine failure risks
    - critical components พังแล้ว user flows / system flows ยังไง
    ✅ Implement self-preservation mechanisms
    - design to isolate faults - เช่น ระบบ Message Queue ทำ Retry Flow
    - หา design pattern -
    ✅ Build comprehensive redundancy and resiliency
    - by layer / tier เช่น App / Queue / DB มีส่วน HA คนละชุด หรือ ถ้างบน้อยเน้นส่วน DB
    - ทำ Geo-Replication

A failure mode analysis helps you understand how a DDoS attack may affect the workload

  • Design for Recovery
    💾 Be prepared for disasters
    - อะไรที่สำคัญ
    - documented recovery plans พวก BCP
    - DR Site
    💾 Address stateful data พวก App Data เช่น
    - DB ทำ Automated Backup / HA ฅ
    - NoSQL อย่าง Cosmos ทำ Multi-Region lowers your RTO and RPO
    💾 Implement automated self-healing capabilities in the design
    - ถ้า K8S กำหนด Replica มันจะทำให้ตามกำหนก
    - VM Azure Virtual Machine Scale Set + Application Health Extension
    - Azure Monitor actions can be used to automatically perform actions when an alert is triggered. In this case, the action would be to restart the application

Design for Recovery - The workload must be able to anticipate and recover from most failures, of all magnitudes, with minimal disruption to the user experience and business objectives.

  • Design for operations - Shift left
    🔍 Implement robust monitoring
    - Application Insights
    - Azure Monitor 
    🔍 Predict potential malfunctions and anomalous behavior
    - automatically scale out + limit
    - emergency response plan + Alert
    🔍 Test for reliability risks
    - synthetic transaction testing / chaos testing แล้วดูผล ตัว App มันตายได้ แต่ต้อง gracefully respond ส่งต่องาน ไม่ใช่งานหายไป
    - test degraded state - ใช้ Azure Chaos Studio ได้ - Simulating a component failure in production
  • Keep it simple - Avoid overengineering
    ⚙️Minimize the workload components
    - Add components to your architecture only if they help you achieve target business values. Keep the critical path lean
    ⚙️Standardize your software development lifecycle - หาอะไรใหม่มาช่วย
    ⚙️Minimize your operations and development burden อะไรที่ platform มีให้ใช้ของเค้าไป แต่มันจะ Vendor Lock

Knowledge Check

แปะ

Microsoft Azure Well-Architected Framework - Security

  • Plan your security readiness - adopt and implement security practices in architectural design decisions and operations with minimal friction
    🛡️Optimize security through segmentation
    - แบ่งวงตาม network/team / env และคุมด้วย Access Control (least privilege)
    - isolate systems that handle personally identifiable information (PII)
    🛡️Respond to incidents efficiently
    - ทำ incident response plan - preparedness, detection, containment, mitigation, and post-incident activity
    🛡️Codify secure operations and development practices
    - Shift Left Security มาตั้งแต่ตอน Code > DevSecOps
  • Design to protect confidentiality
    🛡️Strictly limit access (Authen / Authorize)
    🛡️Identify confidential data through classification
    - Classify data based on its type, sensitivity, and potential risk. Assign a confidentiality level for each ตัวอย่างพวก PDPA กลุ่ม PII ข้อมูลที่ระบุถึงเราได้
    - จาก Data > system components
    - Data classification is an ongoing process that you should perform regularly
    🛡️Apply encryption at every step of the data lifecycle
    - Safeguard your data at rest, in transit, and during processing by using encryption, Base confidentiality level
  • Design to protect integrity
    🛡️ Defend your supply chain
    -  help detect vulnerabilities in your code มีหลายตัวอย่าง Dependency Track ก็ใช่
    🛡️ Employ strong cryptographic mechanisms
    - Establish trust and verify by using cryptography techniques like code signing, certificates, and encryption
    🛡️ Optimize the security of your backups
    - Ensure backup data is immutable and encrypted when data is replicated or transferred.
    - Azure Storage using the write-once-read-many (WORM)
  • Design to protect availability
    🛡️ Enhance reliability through robust security ทำให้ระบบมันทน
    - กันยิงถล่ม DDos
    - กันกรอกแปลกแล้วต้าง input validation into the system to sanitize input อันนี้เป็นอีกตัวอย่าง
    🛡️Proactively limit attack vectors
    - ป้องกัน เช่น ลง EDR / Antivirus หรือ Azure WAF มาช่วย
    🛡️Secure your recovery strategy
    - DR Site/ Backup ต้องรอด เคยเจอ Ransomware มา แล้ว DR ไปด้วย แต่ยังมี Backup เลย Recover ได้
  • Sustain and evolve your security posture
    🛡️Perform threat modeling to identify and mitigate potential threats
    - ทำ threat modeling
    - และหาทางจัดการกับมัน
    🛡️Independently verify your controls - Run periodic security tests / Update ระบบ
    🛡️Get current, and stay current - Update Patch

Knowledge Check

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.