本篇文章是 Netflix 的內部架構技術分享文,本篇文章要探討的是當 Netflix 內部大量採用 Google Drives(Sheets, DDocs, Slides...etc)進行檔案分享時所遇到的問題,以及 Netflix 是如何解決這些問題的。
問題: 對 Netflix 來說,由於下列兩個理由,導致目前 Google Drive 上大概有兩千萬的檔案
1. Netflix Studio 的合作夥伴大量使用 Google Service 來傳輸資料
2. 資料科學家需要將資料複製回本地的 Data 倉庫進行分析。
Netflix 內部為了方便存取這些資料,透過程式化的方式透過 Google API 來存取這些大量成長的資料,然而這樣的方式卻導致了兩個很麻煩的問題
1. 應用程式開發者與資料科學家必須要各自維護存取 Google 服務的帳號密碼,同時很多程式碼會大量的被重複開發。
2. 從可觀測性系統來說,到底有哪些檔案資料從 Google Drive 與 Data 倉庫移動是很不清楚的。
Netflix 為了解決這些問題,決定自行打造一個 Service Proxy 來處理所有流向 Google Services 的請求。透過這個中介層的服務,Google 服務認證的部分就可以有效率的於 Proxy 這層來處理掉,同時也能夠透過 Log 的方式來記錄到底哪些檔案目前正在移動,彌補了過往可觀性系統的缺失。
文中先介紹了關於 Google API 的架構,Netflix 內部原先大部分都透過 Python 或 Java 等程式語言來撰寫 Client 端的應用程式。為了讓整個 Proxy 能夠更有效的處理 Credential 的部分,Netflix 這邊還導入的內部工具(Metatron) 來管理這些資訊。
其他相關資訊還有
1. Proxy 基於 Java 開發
2. 使用 gRPC 來產生不同語言的 endpoints,統一由 Proxy 將請求轉為 HTTP 送往 Google 處理
此外,為了讓 Netflix 內部的所有人都可以很輕鬆的於 Google Drive 與 Data 倉庫間來更動資料, Netflix 為此打造一個可排程的 Job 來默默執行。文章後半段主要在介紹這個 Job 的架構與用法
對於全文有興趣的都歡迎閱讀~
https://netflixtechblog.medium.com/data-movement-for-google-services-at-netflix-9a77ca69f7c4
「java http client」的推薦目錄:
- 關於java http client 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於java http client 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
- 關於java http client 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的精選貼文
- 關於java http client 在 Overview | Google HTTP Client for Java 的評價
- 關於java http client 在 Java HTTP post without apache http client - gists · GitHub 的評價
- 關於java http client 在 JDK 11 HttpClient - Cannot assign requested address - Stack ... 的評價
- 關於java http client 在 Building an extensible HTTP client for GitHub in Java - Clever ... 的評價
- 關於java http client 在 Road to the Java 11 HTTP Client with Chris Hegarty - YouTube 的評價
- 關於java http client 在 java httpclient ConnectTimeout - Max的程式語言筆記 的評價
- 關於java http client 在 Java 코드 예 | YouTube Data API | Google Developers 的評價
java http client 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
ถ้าพูดถึงภาษาที่เอาโค้ดไปแทรกซึมอยู่ใน HTML ได้
แล้วทำงานฝั่ง server side
.
ดังๆ มีอยู่สามตัวสู้กันมาอย่างยาวนาน
PHP
ASP.NET ของไมโครซอฟต์
JSP สาย Java ของ Oracle
.
ลองเปรียบเทียบได้ตามภาพ
.
หมายเหตุ JavaScript
โดยธรรมชาติมันก็แทรกอยู่ใน HTML
แต่เวลาทำงานจริง จะอยู่ฝั่ง client side (บนบราวเซอร์)
.
ถ้าเราจะเปลี่ยนมาทำงานบน server side ก็ได้ด้วย
โดยใช้ node.js กับ deno
พวกนี้เป็นรันไทม์ JavaScript ฝั่ง server side
ไม่ต้องพึ่งการเขียนโค้ดด้วย PHP, ASP.NET และ JSP
.
ที่มา
http://forhadparvez.blogspot.com/2017/03/aspnet-vs-php-vs-jsp.html
.
✍เขียนโดย โปรแกรมเมอร์ไทย thai programmer
java http client 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的精選貼文
+++ access token คืออะไรใน facebook ++++
😋 ปกติ facebook เปิดให้เว็บ (รวมทั้งแอพ) ที่เราเขียนขึ้น
สามารถใช้ระบบ login ของ facebook ได้
ทำให้เว็บนั้นได้สิทธิเข้าถึงข้อมูลส่วนตัวของ user นั้นๆ บน facebook
.
และในหลายเว็บไซต์ เราคงเคยเห็น
ขอแค่มีแอคเคาท์เฟสบุ๊คก็สามารถล็อกอินได้เลย
ไม่ต้องเสียเวลายุ่งยาก กรอกสมัครสมาชิกใหม่แต่อย่างใด
:
โดยในโพสต์นี้จะขออ้างอิง
การใช้ระบบล็อกอิน facebook
ซึ่งเบื้องหลังความสำเร็จนั้น facebook จะแจก access token
เพื่อให้เว็บใดๆ สามารถนำไปใช้จัดการยูสเซอร์ล็อกอินได้
:
ก่อนจะพูดถึง access token ขอย้อนไปสมัยวัยกระเตาะปี 2534
เมื่อ "ทิม เบอร์เนิร์ส-ลี" ได้ทำคลอดเว็บไซต์แรกของโลก
จนเป็นสิ่งสามัญประจำบ้านที่มนุษย์โลกใช้เป็น
:
❣ แต่จุดอ่อนของฉัน ....อยู่ที่หัวใจ
เฮยไม่ช่ายแหละ จุดอ่อนของเว็บไซต์
ก็คือมันใช้โปโตคอล HTTP
ซึ่งมันเป็นแบบ stateless ไม่จำสถานะอะไรทั้งนั้น
ความหมายก็คือ ตัว Server ความจำสั้นมาก เป็นโรคอัลไซเมอร์
พอมันรับ request จาก browser
ก็จำไม่ได้ว่ามาจากไหน???
ใครส่งมาจำไม่ได้แล้ว!!!!!
:
🤔 เพื่อแก้ปัญานี้ในทางเทคนิค
เขาจะให้ server ส่ง session id (หรือ session token)
ซึ่ง session id มันเป็นรหัสบางอย่าง ที่เราอ่านไม่ออก แถมยาวด้วย
มันจะถูกส่งไปให้ browser เก็บค่านี้ไว้ในคุ๊กกี้เสี่ยงทาย
.
..ผิดๆ ไม่ใช่คุ๊กกี้นั้น ..แต่ cookies ที่ว่าคือไฟล์ text
Server จะส่ง session id ไปให้ browser
เก็บค่าไว้ใน cookies (เก็บใส่ text อยู่ฝั่ง browser)
:
เวลาเขียนโปรแกรมในฝั่ง server
อย่าง PHP เมื่อใช้คำสั่ง session_start();
จะเป็นการบอกให้ browser เก็บค่า session id ในรูป text เช่น
PHPSESSID=tqb4s5q7k25234eabbvs11dp02
(session id เป็นรหัสที่สุ่มขึ้นมา)
:
แต่ถ้าเป็นภาษาอื่น ก็อาจเห็นเป็นคำอื่นนะครับ
เช่น JSESSIONID (Java EE), PHPSESSID (PHP), และ ASPSESSIONID (Microsoft ASP).
.
😉 ถึงตรงนี้ session id ...อาจมองว่าเป็นรหัสประจำตัวก็ได้
:
ต่อไปนี้เวลาผู้ใช้กดคลิกอะไรบนหน้าเว็บ
ทาง browser ก็จะใจดี
แอบส่ง session id ที่ว่านี้ ไปให้ server อัตโนมัติ
ทำให้ server หายจากอัลไซเมอร์
...จำได้แล้วว่า request ส่งมาจากไหน ...เย้ เย้
.
ดังนั้นถ้าเกิด request ที่ส่งเข้ามา
มันมี session id ค่าเดียวกัน
ก็ถือว่าเป็นพรรคพวกเดียวกัน
(ศัพท์ทางคอมจะบอกว่า request พวกนี้อยู่ SESSION เดียวกัน)
.
แล้วถ้าไม่ใช่ session id เดียวกัน
ก็ถือว่า request นั้น ไม่ใช่พวกพ้องเดียวกัน
:
👉 ประโยชน์ของ session id
จะถูกนำไปใช้ร่วมกับกลไก login/logout
1) เมื่อ user ชื่อ XXX ทำการ login เข้ามา ก็จะมี session id เป็นรหัสประจำตัวอันหนึ่ง
2) พออีก user ชื่อ YYY ทำการ login เข้ามา จะมี session id เป็นรหัสประจำตัวคนละตัว
3) พอทั้งสอง user ทำการ logout ก็จะทำให้ session id หมดอายุ
:
คำถาม ถ้าเราไปกดล้าง cookies ทั้งหมดใน browser จะเกิดอะไรขึ้น?
- คำตอบค่า session id จะหายไปหมด
- ดังนั้นใครแอบ login ค้างเว็บโป้ เว็บโน่นนี้นั่น อะไรไว้ ...หึหึๆๆ
- ก็ต้อง logout อัตโนมัติ เพื่อ login ใหม่ ...เศร้ามั๊ยละ
(server จำเราไม่ได้แล้ว
เพราะ browser ไม่ส่ง session id ไปให้)
:
เรื่อง session id ฟังเหมือนดี
😨 แต่การใช้ร่วมกับ user/password เพื่อ login จะมีข้อเสีย เช่น
1) ง่ายต่อ hacker มาแอบลอบขี่ session
เพื่อสวมรอยใช้ sesion id (Cross-Site Request Forgery: CSRF)
...ทางเทคนิคขอไม่พูดถึง หาอ่านตามเว็บได้
2) เป็นภาระให้ server ต้องจำ session id ว่าเป็นของ user คนใด มีสิทธิอะไรบ้าง และจำข้อมูลอื่นๆ ของ user เป็นต้น
3) แล้วถ้าจะให้ user เดียวกัน login คนละอุปกรณ์ เช่น
เว็บก็ได้ มือถือก็ดี ...จะยุ่งยากมากขึ้น (ต้องก็อปปี้ session ไปให้)
4) และข้อเสียอื่นๆ ทีไม่ได้กล่าวถึง
:
😘 แต่เขาก็มีเทคนิคเพื่อแก้ทางนะครับ
.
ก็คือใช้สิ่งที่เรียกว่า "acces token "
ซึ่งการที่จะได้ acces token
ก็ต้อง login ด้วย user/password เพื่อไปแลกเอามา
...ต้องยืนหมู ยืนแมวกันก่อน ถึงจะได้ access token
จากนั้นเราจะใช้มันแทนการ login ได้เลย
.
ทำให้เราไม่ต้องป้อน user/password บ่อยๆ
แล้วแต่ละ user ก็จะได้ access token หน้าตาไม่เหมือนกันเด็ดขาด
พอถึงเวลา user ทำการ logout ออกไป ตัว access token ก็จะหมดอายุทันที
:
😙 ถึงตรงนี้ access token อาจเปรียบได้เหมือนกุญแจ
หรืออาจมองเป็นตั๋ว หรือบัตรผ่านก็ได้ ...แล้วแต่จินตนาการเปรียบเปรย
ข้อแตกต่างจาก session id ก็คือ
1) access token จะไม่ถูกเก็บใน cookies
2) access token จะเก็บข้อมูล ที่พอเปิดเผยได้
เช่น user_id, สิทธิต่างๆ , วันหมดอายุ
(ไม่เป็นภาระให้ server จำข้อมูลพวกนี้)
:
ยิ่งถ้านำ access token ไปใช้งานร่วมกับกลไกล login ก็จะเห็นข้อดี เช่น
1) ป้องกัน hacker ไม่ให้แอบใช้ session ด้วยวิธี Cross-Site Request Forgery (CSRF)
2) สามารถ login จากมือถือ และเว็บ เพียงแค่ใช้ user เดียวกัน ก็ทำได้ง่ายดาย
ก็แค่แจก access token ให้แค่นั้น ...ก็เหมือนที่ facebook ทำไง
(ไม่เก็บไว้ใน cookies ของ browser)
3) ตัว server สามารถทิ้งหน้าที่ login/logout อันเสียยุ่งยาก ...โยนไปให้ authenticate service ข้างนอกทำแทน
4) ตัว server ไม่ต้องมีภาระดูแลข้อมูล user
:
😀 ตัดกลับมาดูกลไก login ด้วย user/password ของ facebook
ซึ่งคอนเซปต์ตามรูปที่โพสต์เลยครับ (เป็นตัวอย่าง php)
สรุปง่ายๆ
- เวลา user ทำการ login
- มันจะแอบสวิซ์ไปหา facebook ให้ทำหน้าที่ login แทน
- เมื่อนั้น facebook จะโยน access token กลับมาให้เว็บเรา
- จากนั้น user จะใช้มันเป็นบัตรผ่าน ไม่ต้อง login ซ้ำอีกแหละ
:
ซึ่ง Access token ของเฟสบุ๊คมีหลายชนิด เช่น
-User Access Token
-App Access Token
-Page Access Token
-Client Token
แต่ละชนิดมีสิทธิแตกต่างกันได้ ขอไม่ลงลึกนะ
:
👉 เรื่อง session id กับ access token ที่เล่ามาทั้งหมดนี้
ถือเป็นขอหวานอันแสนหอมที่ hacker ชอบมากๆ
ถ้าพวกเขาขโมยได้ รับรองว่าจะสวมรอย user ที่กำลัง login ได้
จากนั้น hacker จะได้สิทธิทุกอย่างเหมือน user นั้นหมด ...เสร็จโจรละที่นี้
.
ยกเว้นเราจะ logout ออก
เพื่อให้ session id หรือ access token หมดอายุ
เมื่อนั้น hacker ก็จะหมดสิทธิสวมรอย
:
ในมุม user ก็แค่ล็อกอินใช้งานอย่างเดียว
ไม่ต้องสนใจ access token เบื้องหลังเลย
แต่ถ้าเป็น #โปรแกรมเมอร์ ต้องคำนึงถึงเป็นพิเศษ
เพราะขนาดสี่ตีนยังรู้พลาด นักปราชญ์ยังรู้พลั้ง
ยักษ์ใหญ่สุด พี่เบิ้มอย่าง facebook
ยังพลาดปล่อยให้ access token หลุดออกมาได้เลย จนเป็นข่าวสะเทือนใหญ่โต
.
👌 ด้วยเหตุนี้การเขียนโปรแกรม
ก็ขอให้คำนึงถึงเรื่อง access token ห้ามหลุดรอด
ให้ปลอดภัยจาก hakcker เป็นดีที่สุด
โชคดีทุกท่านครับ
:
:
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
:
+++++++++++++
อ้างอิง
1) https://developers.facebook.com/…/h…/example_facebook_login…
2) https://developers.facebook.com/…/facebook-l…/access-tokens…
java http client 在 Java HTTP post without apache http client - gists · GitHub 的推薦與評價
Java HTTP post without apache http client. GitHub Gist: instantly share code, notes, and snippets. ... <看更多>
java http client 在 JDK 11 HttpClient - Cannot assign requested address - Stack ... 的推薦與評價
... <看更多>
java http client 在 Overview | Google HTTP Client for Java 的推薦與評價
Written by Google, the Google HTTP Client Library for Java is a flexible, efficient, and powerful Java library for accessing any resource on the web via HTTP. ... <看更多>