<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CodeBanBan</title>
    <description>The latest articles on DEV Community by CodeBanBan (@codebanban).</description>
    <link>https://dev.to/codebanban</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F160551%2Fa133f441-cf0f-40d9-a7d7-71568a155971.jpeg</url>
      <title>DEV Community: CodeBanBan</title>
      <link>https://dev.to/codebanban</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codebanban"/>
    <language>en</language>
    <item>
      <title>บันทึกการปรับ Performance ให้ระบบ Code Name: Peppermint #2 ย้ายไป Logger Database</title>
      <dc:creator>CodeBanBan</dc:creator>
      <pubDate>Fri, 04 Aug 2023 09:41:05 +0000</pubDate>
      <link>https://dev.to/codebanban/banthuekkaarprab-performance-aihrabb-code-name-peppermint-2-yaayaip-logger-database-1jlg</link>
      <guid>https://dev.to/codebanban/banthuekkaarprab-performance-aihrabb-code-name-peppermint-2-yaayaip-logger-database-1jlg</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/codebanban/banthuekkaarprab-performance-aihrabb-code-name-peppermint-1-8g8"&gt;Part 1 Upgrade Server Spec&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจาก Review ระบบปัจจุบันกันแล้ว&lt;br&gt;
จึงตัดสินใจปรับ infra ของตัวระบบ&lt;br&gt;
เพื่อให้รองรับการ scale ที่ง่ายขึ้น&lt;/p&gt;

&lt;p&gt;ระบบตอนแรก Design แบบ simple เลย คือ ตัวแอพ และ database อยู่ในเครื่องเดียวกันเลย&lt;br&gt;
จึงทำให้เครื่องทำงานค่อนข้างหนัก&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5MUMIwsN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ng86nvoj068kh0qxfia8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5MUMIwsN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ng86nvoj068kh0qxfia8.jpg" alt="Image description" width="511" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ทางทีมจึงตัดสินใจ แยกส่วน database ออกไปอีกเครื่อง&lt;br&gt;
เพื่อช่วยกระจายการทำงานของแต่ละส่วน&lt;br&gt;
จากที่คุยกัน ทีมตัดสินใจแยกเครื่อง database ออกไปอีก 2 ส่วน คือ&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Main DB ซึ่งเบื้องต้นจะทำ Replicate master/slave&lt;/li&gt;
&lt;li&gt;Logger DB ไว้เก็บ activity log ทุกๆการเรียก api&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;แต่การย้ายทั้งหมดเป็นเรื่องค่อนข้างยาก จึงค่อยๆ ทยอยทำเป็นส่วนที่กระทบน้อยก่อน&lt;br&gt;
ใน Part นี้ จึงเลือกย้าย Acitivity log ไปเครื่อง Logger DB ก่อน&lt;br&gt;
ฝั่ง server จึงปรับออกมาเป็นตามนี้&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CHwmQHFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cqms2kbin7gjy7u9ax0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CHwmQHFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cqms2kbin7gjy7u9ax0.jpg" alt="Image description" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากย้าย Activity Log ไปอีกเครื่องแล้ว&lt;br&gt;
จะเห็นว่า CPU ลดลงมาอยู่ที่ 30%-35% ซึ่งทำให้เครื่องเสถียรขึ้นพอสมควร&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VXzjUNY6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vtq367pk5dn9kqtybjx0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VXzjUNY6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vtq367pk5dn9kqtybjx0.jpg" alt="Image description" width="749" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>database</category>
      <category>performance</category>
    </item>
    <item>
      <title>บันทึกการปรับ Performance ให้ระบบ Code Name: Peppermint #1 Upgrade Server Spec</title>
      <dc:creator>CodeBanBan</dc:creator>
      <pubDate>Wed, 26 Jul 2023 09:58:42 +0000</pubDate>
      <link>https://dev.to/codebanban/banthuekkaarprab-performance-aihrabb-code-name-peppermint-1-8g8</link>
      <guid>https://dev.to/codebanban/banthuekkaarprab-performance-aihrabb-code-name-peppermint-1-8g8</guid>
      <description>&lt;p&gt;เกี่ยวกับ Project Code Name: &lt;strong&gt;Peppermint&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;โปรเจครัน production มาได้ประมาณ 5 ปี&lt;/li&gt;
&lt;li&gt;เริ่มจากที่คิดกันว่าจะเป็น product เล็กๆ คงมี User ใช้งานไม่เท่าไหร่&lt;/li&gt;
&lt;li&gt;ทีมเริ่มต้นมี 4 คน ใช้เวลาประมาณ 6 เดือน ปล่อย release แรก&lt;/li&gt;
&lt;li&gt;อีก 6 เดือนถัดมา เป็นการปรับแต่งตาม feedback ลูกค้า&lt;/li&gt;
&lt;li&gt;หลังจาก project เริ่มนิ่ง ทีมปรับเหลือคนมาดูแล แค่ 1 - 2 คน&lt;/li&gt;
&lt;li&gt;ด้วยความที่ต้องการเร่งให้ release เร็วที่สุด และประเมินแล้วว่ามี user ไม่น่าจะเยอะ ทางทีมเลยเลือกที่จะเขียนโดยไม่ได้คำนึงถึง performance ของระบบ เช่น การวนลูป Query Data&lt;/li&gt;
&lt;li&gt;ช่วงแรก ก็ทำงานได้เร็วปกติ&lt;/li&gt;
&lt;li&gt;แต่ช่วง 2 ปีหลัง เริ่มมีลูกค้าสนใจมาใช้งานเพ่ิมขึ้นต่อเนื่อง&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  จนกระทั้งช่วงปีใหม่ ของปี 2023
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ระบบเริ่มทำงานได้ช้ามาก เนื่องจากมี user เพิ่มขึ้น&lt;/li&gt;
&lt;li&gt;ทางทีมจึงทำการปรับ performance เบื้องต้น คือ optimize SQL บางคำสั่ง และทำ Index ให้กับ Table ที่ยังไม่ได้ทำไว้&lt;/li&gt;
&lt;li&gt;ผลลัพธ์ออกมาได้ผล คือ &lt;code&gt;ค่อนข้างพอไหว&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;แต่เนื่องจากยังมี product และ feature อื่นอยู่ในคิว ค่อนข้างเยอะ&lt;/li&gt;
&lt;li&gt;ทางทีมจึงตัดสินใจว่า ปล่อยไปก่อน น่าจะรับไหวได้อีกสักปี&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  June 2023
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ช่วงพีคของวัน ระบบอืดหนักมาก user บางคน ไม่สามารถทำรายการได้เลย&lt;/li&gt;
&lt;li&gt;ทางคนที่ช่วยดู server แจ้งว่า CPU average usage อยู่ที่ 95%++&lt;/li&gt;
&lt;li&gt;สรุปการแก้ไขเบื้องต้น คือ &lt;code&gt;Upgrade เครื่องโดยเพิ่ม CPU และ Ram เข้าไปก่อน&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ผลการแก้ไข &lt;code&gt;ช่วยให้ CPU ลดลงมาอยู่ที่ประมาณ 45%&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ทางทีมจึงเริ่มต้องลงมาปรับ performance อย่างจริงๆจัง เนื่องจากปริมาณ user ที่เพิ่มขึ้นต่อเนื่อง และมีตัวแทนมาเอา Product ไปขายแบบ white label&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUnPFMt---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fr7jn4yn15iq7neybyfd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUnPFMt---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fr7jn4yn15iq7neybyfd.jpg" alt="Image description" width="800" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;จากรูปจะเห็นว่า CPU ลดลงมาอย่างชัดเจน&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devjournal</category>
      <category>database</category>
      <category>performance</category>
    </item>
    <item>
      <title>บันทึกการย้าย Project จาก GitLab ไป Bitbucket #Phase1</title>
      <dc:creator>CodeBanBan</dc:creator>
      <pubDate>Mon, 19 Jun 2023 10:11:08 +0000</pubDate>
      <link>https://dev.to/codebanban/banthuekkaaryaay-project-cchaak-gitlab-aip-bitbucket-phase1-2c4j</link>
      <guid>https://dev.to/codebanban/banthuekkaaryaay-project-cchaak-gitlab-aip-bitbucket-phase1-2c4j</guid>
      <description>&lt;p&gt;เริ่มจาก GitLab เริ่มบังคับให้มี member ได้แค่ 5 คน&lt;br&gt;
แต่ package จ่ายเงินของ GitLab ตอนนี้เปลี่ยนเป็น Premium&lt;br&gt;
ซึ่งราคาคนละ $29 / month&lt;br&gt;
ซึ่งราคาแรงไปสำหรับทีม และ Product ที่ scale ยังเล็กอยู่&lt;br&gt;
เลยตัดสินใจย้ายไปที่ Bitbucket กัน&lt;/p&gt;

&lt;p&gt;แต่เนื่องจากตัว CI/CD ทั้งหมดเขียนอยู่บน GitLab&lt;br&gt;
ถ้าจะเขียนตัว CI/CD ใหม่หมดทุกโปรเจคให้มาเป็นของ Bitbucket&lt;br&gt;
น่าจะต้องใช้เวลานานมาก&lt;br&gt;
เลยตัดสินใจแบ่งเป็น 2 เฟส คือ&lt;br&gt;
&lt;strong&gt;Phase1&lt;/strong&gt; &amp;gt; ใช้ Bitbucket เก็บไฟล์เท่านั้น เมื่อมีการ push ก็ให้ตัว Bitbucket ทำการ push ต่อไปที่ GitLab&lt;br&gt;
แล้วทาง GitLab ก็จะรัน CI/CD ต่อได้เลย&lt;br&gt;
&lt;code&gt;วิธีนี้ทำให้ไม่ต้องเขียน CI/CD ใหม่&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Phase2&lt;/strong&gt; &amp;gt; คือ ค่อยๆ กลับมาเขียนตัว CI/CD ให้เป็นของ Bitbucket&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ข้อเสีย&lt;/strong&gt;&lt;br&gt;
จะแสดงชื่อคน push เป็นคนเดียวกันทั้งหมด&lt;br&gt;
ถ้าจะดูชื่อคน commit จริงๆ ต้องกดเข้าไปดูใน commit อีกที&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอน&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;สร้าง ssh key เพื่อให้ Bitbucket push code ไปที่ GitLab ได้
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -t rsa -b 4096 -N '' -f my_ssh_key&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add ssh key ใน GitLab Profile ของเรา&lt;/li&gt;
&lt;li&gt;Add ssh key ใน Project ที่ Bitbucket ของเรา&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;bitbucket_pipelines.yml&lt;/code&gt; ใน project ของเรา
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pipelines:
  branches:
    '*':
      - step:
          script:
            - git remote add gitlab [Repo URL ของเรา]
            - git push gitlab $BITBUCKET_BRANCH
  tags:
    '*':
      - step:
          script:
            - git remote add gitlab [Repo URL ของเรา]
            - git push gitlab $BITBUCKET_TAG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devjournal</category>
      <category>management</category>
    </item>
  </channel>
</rss>
