Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In
Continue with Google
Continue with Facebook
or use


Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here
Continue with Google
Continue with Facebook
or use


Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.


Have an account? Sign In Now

Sorry, you do not have a permission to ask a question, You must login to ask question.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Stack Ask

Stack Ask Logo Stack Ask Logo

Stack Ask Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 3513
Next
In Process
hieuthai642
  • 0
hieuthai642Beginner
Asked: December 7, 20212021-12-07T03:21:16+00:00 2021-12-07T03:21:16+00:00In: DevOps

Thiết kế API limit rate như thế nào

  • 0

Mọi người cho em hỏi, trong những sản phẩm thực tế thì có dùng API limit rate không ạ?

Nếu có thì sẽ thiết kế giải pháp như thế nào, (ngoài việc dùng API Gateway build sẵn) nếu thiết kế service riêng cho chuyện này cần làm những công việc chính gì

Em có thấy 1 bài blog của Kong về thuật toán dùng trong rate limit https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/

Em hiểu là có thể thiết kế 1 service để limit rate (single entry point), service này sẽ áp dụng thuật toán nào đó để limit rate rồi route traffic tới các service khác trong hệ thống. như vậy có đúng không?

Khi nói đến limit rate là mình chỉ giới hạn ở HTTP, hay các giao thức khác ở tầng application cũng có thể áp dụng như AMQP, MQTT, hay rộng hơn là traffic từ tầng transport (TCP, UDP) ạ

question
  • 4 4 Answers
  • 88 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook
  • Report

4 Answers

  • Voted
  • Oldest
  • Recent
  1. monkey Enlightened
    2021-12-07T03:46:19+00:00Added an answer on December 7, 2021 at 3:46 am
    This answer was edited.

    1. Từ khi đi làm tới giờ anh chưa bao giờ thấy dùng rate limit kiểu này, đa phần các dự án đều dùng round robin cho phần HTTP thôi em ạ, làm như vậy mới đảm bảo được tận dụng tối đa tài nguyên của các node, không thì một node thì sấp mặt, 1 node thì ngồi chơi thì hơi dở. Và nó còn liên quan đến HA. Giả sử 1 node code tèo thì cả hệ thống cũng không sao và tỉ lệ request bị ảnh hưởng cũng thấp. Còn nếu bỏ hết request vào 1 node, mà node đó bị hỏng thì node tiếp theo cho dù được sử dụng đến nhưng cũng không thể nào khôi phục được request đã mất.
    2. Có riêng trong bài toán liên quan đến socket game, hay một số bài toàn liên quan đến live streaming, thì vì bị giới hạn về số lượng port, và các logic đòi hỏi bắt buộc user phải tìm được phòng chơi và chơi chung phòng với nhau nên áp dụng phương pháp gần giống kiểu rate này, nghĩa là cho user vào hết 1 server, đến 1 số lượng nào đó giới hạn thì cho user vào server kế tiếp.
    3. Về cơ bản là HTTP hay AMQP, MQTT … đều có thể áp dụng được kiểu rate limit này. Tuy nhiên vẫn là liên quan đến bài toán nghiệp vụ và hạ tầng mà em có quyết định dùng hay không nhé.

    • 1
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • hieuthai642 Beginner
      2021-12-07T08:59:53+00:00Replied to answer on December 7, 2021 at 8:59 am

      Em cảm ơn anh, ý số 2 và 3 thì em rõ rồi ạ.

      Nhưng ý số 1 thì em chưa hiểu lắm, phần mà anh đề cập tới hình như là giai đoạn trước em 1 bước. Em có đọc thấy round robin là 1 phương pháp distribute request tới các server khác nhau, còn ý em muốn hỏi là kiểu giống ý số 2,

      vd aws ses & ec2 thì giới hạn số lượng api trong 1 giây https://docs.aws.amazon.com/ses/latest/dg/quotas.html
      https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html

      Giả sử e muốn dựng các dịch vụ tương tự thì cách tiếp cận rate limit như thế nào a nhỉ, mình xử lý luôn trong code hay tạo 1 service để reuse lại ở nhiều nơi. Trong ví dụ về socket game & dịch vụ livestream, anh có thể chia sẻ 1 tí về cách thực hiện được không ạ

      Về phần hạ tầng thì e giả sử deploy service này bằng k8s trên cluster, nginx sẽ chạy round robin để distribute request tới các pod, như vậy chắc là đúng với ý 1 của anh về HA rồi nhỉ

      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
  2. tvd12 Enlightened
    2021-12-07T15:38:30+00:00Added an answer on December 7, 2021 at 3:38 pm

    1. Anh thấy aws có dịch vụ autoscale, vậy có thể nó cũng là dạng dịch vụ dựa vào rate limit, anh chỉ đoán vậy thôi em ạ, vì anh cũng không phải chuyên gia về aws
    2. Nếu em muốn tự dựng thì anh nghĩ là em phải tự viết lại server LB, em có thể fork nginx về và viết thêm code của em vào. Em sẽ tự quản lý các node, số lượng request đến và số lượng request còn tồn (chưa được xử lý) trên các node là bao nhiêu để sẽ tiến hành các bước tiếp theo.
    3. Ví dụ về socket game thì anh có 1 bài viết, em có thể tham khảo nhé.
    4. Về phần hạ tầng thì e giả sử deploy service này bằng k8s trên cluster … Đúng rồi em ạ

    • 1
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • hieuthai642 Beginner
      2021-12-08T15:02:46+00:00Replied to answer on December 8, 2021 at 3:02 pm

      Em cảm ơn anh, bài viết hay quá anh ạ, với số CCU như thế thì công ty em đang làm không bao giờ đạt đến được mất

      Em đang nghiên cứu thử hướng plugin cho nginx còn modify source code có vẻ hard core quá

      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report

You must login to add an answer.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 826
  • Answers 1k
  • Best Answers 80
  • Users 338
  • Popular
  • Answers
  • monkey

    [Deep Learning] Làm thế nào để xác định được cái ...

    • 16 Answers
  • Thành Vương

    Bug sai đường dẫn khi config ckeditor lên live

    • 14 Answers
  • Tú Trần Anh

    [Ezyfox Server] Unity game client không gửi được command khi ...

    • 12 Answers
  • tvd12
    tvd12 added an answer 1. Anh không hiểu tại sao em lại cần phải… February 4, 2023 at 7:50 am
  • tvd12
    tvd12 added an answer Cái này anh thấy là em đang gửi dữ liệu… February 4, 2023 at 7:46 am
  • monkey
    monkey added an answer Đây em: class Event{} class Room{} class EventRoom{eventId, roomId} February 2, 2023 at 9:07 am

Related Questions

  • Nguyễn Thái Sơn

    Ngnix và API gateway

    • 1 Answer
  • Nguyễn Thái Sơn

    Mục đích ansible

    • 2 Answers
  • hungw7

    Consistent hashing in Kong mode db-less

    • 0 Answers

Top Members

tvd12

tvd12

  • 76 Questions
  • 1k Points
Enlightened
monkey

monkey

  • 122 Questions
  • 1k Points
Enlightened
Nguyễn Thái Sơn

Nguyễn Thái Sơn

  • 205 Questions
  • 307 Points
Enlightened

Trending Tags

#formatdate .net .net core .net oop abstract class access app access token ai analytics android ansible anti-flooding apache poi api app architecture artificial intelligence assembly async asyncawait atomicboolean authentication backend backend nestjs background bash script batch bean big project binding bitcoin blockchain blog boot-nodes branch british btree bucket4j buffered build bundle c# c# .net cache caching callback career career path cast centos chat cloud cloud reliability commit communication company computer science concurrent config-css connection pool content-disposition contract convert date to number cookie cors cosmos cosmos-sdk crawl data cron css database database migration datasource datastructure deadlock decentralized exchange deep learning deploy contract design-pattern design patterns devops dex di distraction programing dns docker download draw.io du học duration dữ liệu lớn eclip editor elasticsearch email employee english erc20 erc721 estimation eth ethereum ethereum login excel exception exception handle exception handler executor export compliance extensions exyfox ezyfox ezyfox-boot ezyfox-server ezyfoxserver ezyhttp ezymq-kafka ezyredis facebook fe filter floating point flutter format json freetank french front-end frontend fullstack fulltextsearch future gallery game game-box game-room game-server gateway get get file zip git glide go golang google gorilla graduation thesis graphql grapql grpc guide h2 database handy terminal hazelcast hibernate hibernateconfig html http https hyperloglog image index indexing integration-test intellij interface interview io ioc ipfs isolate issue it java java core javacore javascript java spring javaw java web jenkins jetbrains job join jotform jpa js json json file jsonproperty json to object jsp jsp & servlet junit-test jvm jwt kafka keep promise kerberos keycloak kotlin language languague library list load-balancing load balancer lock log log4j log4j-core login lưu trữ machine learning macos mail mail template main maria db math maven merge message queue messaging metamask microservice microservices migration mobile model mongo monitoring mq msgpack multi-threading multiple tenant multithread multithreading mysql n naming naming convention nan netcore netty networking nft nft game nginx nio node.js nodejs non-blocking io null oop opensource optimize oracle orm otp message paginaiton pagination pancakeswap panic partition pdf pgpool phỏng vấn plugin pointer postgresql postman pre private_key procedure profile programming project management promise properties push-noti push message android push notification python python unicode qrcode question queue rabbitmq reactive reactjs reactjs download readmoretextview recyclerview redis refactor refresh token regex replica repository request resilence4j resource rest resttemplate roadmap ropssten ropsten round robin rust rxjava s3 schedule scheduled scheduled spring boot search security send email send mail server servlet session shift jis singleton sjis slack smart contract soap socket socket server soft delete solution sosanh spring spring-boot-test spring-jpa spring aop springboot spring boot spring data jpa spring redis springsecurity spring security springwebflux mysql spring websocket spring websocket cors sql sql server sse ssl email stackask storage stream stream api stress test structure trong spring boot study synchronize synchronized system environment variables test thread threadjava threadpool thread pool thymeleaf tomcat totp tracking location transaction transfer transfer git udp uniswap unit test unity upload upload file utf-8 file validate validate date vector view volatile vue vue cli watermark web web3 web3 client webassembly webflux webpack websocket windows 11 winforms work zip file zookeeper

Footer

Stack Ask

Stack Ask is where Developers Ask & Answers. It will help you resolve any questions and connect you with other people.

About Us

  • Meet The Team
  • About Us
  • Contact Us

Legal Stuff

  • Terms of Service
  • Privacy Policy
  • Cookie Policy

Help

Follow

© 2021 Stack Ask. All Rights Reserved
Powered by youngmonkeys.org