This is exciting, thanks Eric. Any idea how well this fits in with flexible cache groups?
On Thu, May 9, 2019 at 10:51 Eric Friedrich <efriedr...@synamedia.com> wrote: > GH Issue Link: https://github.com/apache/trafficcontrol/issues/3557 > > Background > ---------- > Edge caches can currently be assigned to delivery services in three ways: > - By Server Profile > - By Cache Group > - By Individual Cache > > The mids of the assigned edges are chosen based only on the parent and > secondary_parent cachegroup settings. > > Use Cases > ---------------- > Create a more flexible method of assigning mid/edge caches to delivery > services. This allows users to solve the following problems: > - Dedicating a subset of caches to particular content providers/CDN > services > - Dedicating a subset of caches to particular content types (i.e. PDL or > HTTPS content) > - Specifying exactly which mid-caches are used for a particular delivery > service. > > The existing "assign by profile" is not sufficient because servers can > only be in a single Profile. This proposal introduces a new Cache > Assignment Group, of which a server can be in more than one. Also, there is > no existing way to influence the selection of mid-caches on a DS-by-DS > basis. > > The first two uses cases can be accomplished with individual server > assignments, but this is cumbersome when you need to match assignments of > lots of servers across lots of delivery services. Let's have the DB > relations manage these logical groupings for us instead. > > > Requirements > ------------ > 1) Create Cache Assignment Group in Traffic Ops with a name and description > 2) Allow many to many association of caches to cache assignment groups > 3) Allow many to many association of cache assignment groups to Delivery > Services. > 4) Consider the union of individual cache assignments (in > deliveryservice_server table) and CAG assignments (in new > deliveryservice_assignmentgroup table) when creating remap.config and > CRConfig.json > > 5) Mid-Cache Override: If a mid cache is present in a cache assignment > group, edge caches in that cache assignment group will disregard the parent > and secondary_parent hierarchy. Instead those edges will use only the mids > from that cache assignment group. (No secondary parent support yet). If no > mid is present, edge caches will continue to use parent and > secondary_parent as today. > > > Proposed API changes > -------------------- > > /api/1.4/cacheassignmentgroups > Methods: POST, GET (Get all) > /api/1.4/cacheassignmentgroups/:id > Methods: PUT, GET, DELETE > > Structure: > FieldTypeMethod Present > namestringPOST, PUT, GET > descriptionstringPOST, PUT, GET > cdnIdintPOST, PUT, GET > idintGET > lastUpdated stringGET > > > /api/1.4/cacheassignmentgroupserver > Methods: GET, POST > > Structure: > FieldTypeDescription > cagIdintID of assignment group to which servers will be assigned > replaceboolTrue to overwrite existing assignments, false to only add > additional > serversint array Server ids to assigned into the Cache Assignment > Group > > > /api/1.4/deliveryservicecacheassignmentgroup > Methods: GET, POST > > Structure: > FieldType Description > dsIdint ID of delivery service to which cache assignment groups will > be assigned > replacebool True to overwrite existing assignments, false to only add > additional > cacheassignmentgroups int array CAG IDs to assign into the Delivery > Service > > > Proposed DB Schema Changes > ----------------- > New Table: cacheassignmentgroup > > FieldTypeNotes > idbigintPrimary Key, auto increment > nametextUnique > descriptiontext > cdn_idbigintForeign Key to cdn(id), trigger to pick one as default > last_updatedtimestampDefault now(), trigger to autoupdate > > New Table: cacheassignmentgroup_server > FieldTypeNotes > cacheassignmentgroupbigintForeign Key to cacheassignmentgroup(id) > serverbigintForeign Key to server(id) > > PrimaryKey/Unique constraint on {cag, server} > > New Table: deliveryservice_cacheassignmentgroup > FieldTypeNotes > deliveryservice bigintForeign Key to deliveryservice(id) > cacheassignmentgroup bigintForeign Key to cacheassignmentgroup(id) > > PrimaryKey/Unique constraint on {deliveryservice, cacheassignmentgroup} > > > Limitations > ----------- > If multiple delivery services share the same Origin FQDN and are > assigned to the same caches, ATS requires they share the same set of > parents. Traffic Ops does not currently enforce this restriction. > Validation for this will be added. (I don't think we can accomplish it with > a DB constraint, but if we could that would be awesome. For now, planning > to do it in API validation). > > Notes > ------ > I expect this will take at least 4 PRs (TO API/DB changes, Portal, TO ATS > config Gen, TO CRConfig Gen) with maybe some intermediate steps to do some > minor refactoring. We have a working implementation in Perl TO, but the > config generation is pretty messy. As part of this I'll be porting the API > to Go and trying to create a cleaner, more modular implementation of the > remap and parent config generation. > > We also have a feature coming up after this which will modify the "cache > unit of assignment". In that next feature, we'll allow assignment of a > specific IP address to a Delivery Service (or Cache Assignment Group), so > please keep that in mind as you review the API and schema proposals. > Specifically, anywhere we assign a server now, will soon change to server > and/or optionally ip. > > > This message and any attachment are confidential and may be privileged or > otherwise protected from disclosure. If you are not the intended recipient, > please notify the sender immediately and delete this message and any > attachment from your system. Do not copy them or disclose the contents to > any other person. >