You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apisix.apache.org by Jinhua Luo <lu...@gmail.com> on 2022/09/02 03:45:13 UTC

[DISCUSS] Proposal: Consumer group

Background:

With consumer groups, you can define any number of plugins, e.g. rate
limiting and apply them to a set of consumers, instead of managing
each consumer individually.

While configuring the same plugin for the same route, only one copy of
the configuration is valid. The order of precedence is Consumer >
Consumer group > Route > plugin_config> Service.


Admin API design:

GET
/apisix/admin/consumer_groups
Fetches a list of all Consumer groups.

GET
/apisix/admin/consumer_groups/{id}
Fetches specified Consumer group by id.

PUT
/apisix/admin/consumer_groups/{id}
Creates or updates a new consumer group with the specified id.

DELETE
/apisix/admin/consumer_groups/{id}
Removes the Consumer group with the specified id.

PATCH
/apisix/admin/consumer_groups/{id}
Updates the attributes specified, existing Consumer group. To delete
an attribute, set value of attribute set to null.

PATCH
/apisix/admin/consumer_groups/{id}/{path}
Updates the attribute specified in the path. The values of other
attributes remain unchanged.


Add new variable to indicate the consumer group of the route: $consumer_group_id


Example:

curl http://127.0.0.1:9180/apisix/admin/consumer_groups/company_a -H
'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"limit-count": {
"count": 200,
"time_window": 60,
"rejected_code": 503,
"group": "$consumer_group_id"
}
}
}'


curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "jack",
"plugins": {
"key-auth": {
"key": "auth-one"
}
},
"group_id": "company_a"
}'


curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "johnson",
"plugins": {
"key-auth": {
"key": "auth-two"
}
},
"group_id": "company_a"
}'


curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/get",
"plugins": {
"key-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'


curl -i http://127.0.0.1:9180/get -H 'apikey: auth-one'
...
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 199
...


curl -i http://127.0.0.1:9180/get -H 'apikey: auth-two'
...
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 198
...

Re: [DISCUSS] Proposal: Consumer group

Posted by Bobur Umurzokov <bo...@api7.ai>.
Agree, it is a needed feature.

Kind regards,
Bobur

On Tue, Sep 20, 2022 at 11:42 AM YuanSheng Wang <me...@apache.org> wrote:

> it is a nice new feature.
>
> Can't wait to try it.
>
>
> On Sun, Sep 18, 2022 at 10:57 AM Zhiyuan Ju <ju...@apache.org> wrote:
>
> > Hi,
> >
> > The description is clear to me, and the API design looks good!
> >
> >
> > Jinhua Luo <lu...@gmail.com> 于2022年9月2日周五 11:45写道:
> >
> > > Background:
> > >
> > > With consumer groups, you can define any number of plugins, e.g. rate
> > > limiting and apply them to a set of consumers, instead of managing
> > > each consumer individually.
> > >
> > > While configuring the same plugin for the same route, only one copy of
> > > the configuration is valid. The order of precedence is Consumer >
> > > Consumer group > Route > plugin_config> Service.
> > >
> > >
> > > Admin API design:
> > >
> > > GET
> > > /apisix/admin/consumer_groups
> > > Fetches a list of all Consumer groups.
> > >
> > > GET
> > > /apisix/admin/consumer_groups/{id}
> > > Fetches specified Consumer group by id.
> > >
> > > PUT
> > > /apisix/admin/consumer_groups/{id}
> > > Creates or updates a new consumer group with the specified id.
> > >
> > > DELETE
> > > /apisix/admin/consumer_groups/{id}
> > > Removes the Consumer group with the specified id.
> > >
> > > PATCH
> > > /apisix/admin/consumer_groups/{id}
> > > Updates the attributes specified, existing Consumer group. To delete
> > > an attribute, set value of attribute set to null.
> > >
> > > PATCH
> > > /apisix/admin/consumer_groups/{id}/{path}
> > > Updates the attribute specified in the path. The values of other
> > > attributes remain unchanged.
> > >
> > >
> > > Add new variable to indicate the consumer group of the route:
> > > $consumer_group_id
> > >
> > >
> > > Example:
> > >
> > > curl http://127.0.0.1:9180/apisix/admin/consumer_groups/company_a -H
> > > 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > > {
> > > "plugins": {
> > > "limit-count": {
> > > "count": 200,
> > > "time_window": 60,
> > > "rejected_code": 503,
> > > "group": "$consumer_group_id"
> > > }
> > > }
> > > }'
> > >
> > >
> > > curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
> > > edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > > {
> > > "username": "jack",
> > > "plugins": {
> > > "key-auth": {
> > > "key": "auth-one"
> > > }
> > > },
> > > "group_id": "company_a"
> > > }'
> > >
> > >
> > > curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
> > > edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > > {
> > > "username": "johnson",
> > > "plugins": {
> > > "key-auth": {
> > > "key": "auth-two"
> > > }
> > > },
> > > "group_id": "company_a"
> > > }'
> > >
> > >
> > > curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY:
> > > edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > > {
> > > "uri": "/get",
> > > "plugins": {
> > > "key-auth": {}
> > > },
> > > "upstream": {
> > > "type": "roundrobin",
> > > "nodes": {
> > > "httpbin.org": 1
> > > }
> > > }
> > > }'
> > >
> > >
> > > curl -i http://127.0.0.1:9180/get -H 'apikey: auth-one'
> > > ...
> > > X-RateLimit-Limit: 200
> > > X-RateLimit-Remaining: 199
> > > ...
> > >
> > >
> > > curl -i http://127.0.0.1:9180/get -H 'apikey: auth-two'
> > > ...
> > > X-RateLimit-Limit: 200
> > > X-RateLimit-Remaining: 198
> > > ...
> > >
> >
>
>
> --
>
> *MembPhis*
> My GitHub: https://github.com/membphis
> Apache APISIX: https://github.com/apache/apisix
>

Re: [DISCUSS] Proposal: Consumer group

Posted by YuanSheng Wang <me...@apache.org>.
it is a nice new feature.

Can't wait to try it.


On Sun, Sep 18, 2022 at 10:57 AM Zhiyuan Ju <ju...@apache.org> wrote:

> Hi,
>
> The description is clear to me, and the API design looks good!
>
>
> Jinhua Luo <lu...@gmail.com> 于2022年9月2日周五 11:45写道:
>
> > Background:
> >
> > With consumer groups, you can define any number of plugins, e.g. rate
> > limiting and apply them to a set of consumers, instead of managing
> > each consumer individually.
> >
> > While configuring the same plugin for the same route, only one copy of
> > the configuration is valid. The order of precedence is Consumer >
> > Consumer group > Route > plugin_config> Service.
> >
> >
> > Admin API design:
> >
> > GET
> > /apisix/admin/consumer_groups
> > Fetches a list of all Consumer groups.
> >
> > GET
> > /apisix/admin/consumer_groups/{id}
> > Fetches specified Consumer group by id.
> >
> > PUT
> > /apisix/admin/consumer_groups/{id}
> > Creates or updates a new consumer group with the specified id.
> >
> > DELETE
> > /apisix/admin/consumer_groups/{id}
> > Removes the Consumer group with the specified id.
> >
> > PATCH
> > /apisix/admin/consumer_groups/{id}
> > Updates the attributes specified, existing Consumer group. To delete
> > an attribute, set value of attribute set to null.
> >
> > PATCH
> > /apisix/admin/consumer_groups/{id}/{path}
> > Updates the attribute specified in the path. The values of other
> > attributes remain unchanged.
> >
> >
> > Add new variable to indicate the consumer group of the route:
> > $consumer_group_id
> >
> >
> > Example:
> >
> > curl http://127.0.0.1:9180/apisix/admin/consumer_groups/company_a -H
> > 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > {
> > "plugins": {
> > "limit-count": {
> > "count": 200,
> > "time_window": 60,
> > "rejected_code": 503,
> > "group": "$consumer_group_id"
> > }
> > }
> > }'
> >
> >
> > curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
> > edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > {
> > "username": "jack",
> > "plugins": {
> > "key-auth": {
> > "key": "auth-one"
> > }
> > },
> > "group_id": "company_a"
> > }'
> >
> >
> > curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
> > edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > {
> > "username": "johnson",
> > "plugins": {
> > "key-auth": {
> > "key": "auth-two"
> > }
> > },
> > "group_id": "company_a"
> > }'
> >
> >
> > curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY:
> > edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> > {
> > "uri": "/get",
> > "plugins": {
> > "key-auth": {}
> > },
> > "upstream": {
> > "type": "roundrobin",
> > "nodes": {
> > "httpbin.org": 1
> > }
> > }
> > }'
> >
> >
> > curl -i http://127.0.0.1:9180/get -H 'apikey: auth-one'
> > ...
> > X-RateLimit-Limit: 200
> > X-RateLimit-Remaining: 199
> > ...
> >
> >
> > curl -i http://127.0.0.1:9180/get -H 'apikey: auth-two'
> > ...
> > X-RateLimit-Limit: 200
> > X-RateLimit-Remaining: 198
> > ...
> >
>


-- 

*MembPhis*
My GitHub: https://github.com/membphis
Apache APISIX: https://github.com/apache/apisix

Re: [DISCUSS] Proposal: Consumer group

Posted by Zhiyuan Ju <ju...@apache.org>.
Hi,

The description is clear to me, and the API design looks good!


Jinhua Luo <lu...@gmail.com> 于2022年9月2日周五 11:45写道:

> Background:
>
> With consumer groups, you can define any number of plugins, e.g. rate
> limiting and apply them to a set of consumers, instead of managing
> each consumer individually.
>
> While configuring the same plugin for the same route, only one copy of
> the configuration is valid. The order of precedence is Consumer >
> Consumer group > Route > plugin_config> Service.
>
>
> Admin API design:
>
> GET
> /apisix/admin/consumer_groups
> Fetches a list of all Consumer groups.
>
> GET
> /apisix/admin/consumer_groups/{id}
> Fetches specified Consumer group by id.
>
> PUT
> /apisix/admin/consumer_groups/{id}
> Creates or updates a new consumer group with the specified id.
>
> DELETE
> /apisix/admin/consumer_groups/{id}
> Removes the Consumer group with the specified id.
>
> PATCH
> /apisix/admin/consumer_groups/{id}
> Updates the attributes specified, existing Consumer group. To delete
> an attribute, set value of attribute set to null.
>
> PATCH
> /apisix/admin/consumer_groups/{id}/{path}
> Updates the attribute specified in the path. The values of other
> attributes remain unchanged.
>
>
> Add new variable to indicate the consumer group of the route:
> $consumer_group_id
>
>
> Example:
>
> curl http://127.0.0.1:9180/apisix/admin/consumer_groups/company_a -H
> 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> {
> "plugins": {
> "limit-count": {
> "count": 200,
> "time_window": 60,
> "rejected_code": 503,
> "group": "$consumer_group_id"
> }
> }
> }'
>
>
> curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
> edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> {
> "username": "jack",
> "plugins": {
> "key-auth": {
> "key": "auth-one"
> }
> },
> "group_id": "company_a"
> }'
>
>
> curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
> edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> {
> "username": "johnson",
> "plugins": {
> "key-auth": {
> "key": "auth-two"
> }
> },
> "group_id": "company_a"
> }'
>
>
> curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY:
> edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
> {
> "uri": "/get",
> "plugins": {
> "key-auth": {}
> },
> "upstream": {
> "type": "roundrobin",
> "nodes": {
> "httpbin.org": 1
> }
> }
> }'
>
>
> curl -i http://127.0.0.1:9180/get -H 'apikey: auth-one'
> ...
> X-RateLimit-Limit: 200
> X-RateLimit-Remaining: 199
> ...
>
>
> curl -i http://127.0.0.1:9180/get -H 'apikey: auth-two'
> ...
> X-RateLimit-Limit: 200
> X-RateLimit-Remaining: 198
> ...
>